

# Administración de permisos y control de acceso de Babelfish para Aurora PostgreSQL
<a name="babelfish-permissions"></a>

 En Babelfish para Aurora PostgreSQL, puede administrar los permisos y el control de acceso para bases de datos, esquemas y objetos. En las siguientes tablas se describen los comandos de SQL específicos para conceder permisos en Babelfish con el fin de lograr diversos escenarios de control de acceso. Abarcará los casos de uso admitidos que se pueden implementar, así como las soluciones provisionales para los casos que actualmente no se admiten. Esto le permitirá configurar los permisos adecuados para cumplir con sus requisitos de seguridad y conformidad cuando trabaje con bases de datos de Babelfish.

## Casos de uso admitidos
<a name="babelfish-permissions-supported"></a>

 En la siguiente tabla se explican los casos de uso admitidos en Babelfish. En la tabla se muestran la acción necesaria para lograrlo y ejemplos de comandos de SQL para cada caso de uso. 


|  Caso de uso  |  Action  |  Comandos SQL  |  Comentarios  |  Compatibilidad de versiones de Babelfish  | 
| --- | --- | --- | --- | --- | 
|   Permitir el inicio de sesión para realizar las operaciones SELECT/DML/DDL en cualquier base de datos   |   Añadir el inicio de sesión al rol del servidor sysadmin   |   ALTER SERVER ROLE sysadmin ADD MEMBER `login`   |   Ninguno   |   Todas las versiones   | 
|   Permitir el inicio de sesión para realizar las operaciones SELECT/DML/DDL en una base de datos   |   Hacer que el propietario de la base de datos inicie sesión   |   ALTER AUTHORIZATION ON DATABASE::`database` TO `login`   |   Una base de datos solo puede tener .un propietario.   |   Versión 3.4 y posteriores   | 
|   Permitir que el usuario de la base de datos realice las operaciones SELECT/DML en un esquema   |   Conceder permiso al usuario de la base de datos en un esquema   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON SCHEMA::`schema` TO `user`   |   Ninguno   |   Versión 3.6 y posteriores, 4.2 y posteriores   | 
|   Permitir que el usuario de la base de datos realice las operaciones SELECT/DML en un esquema   |   Hacer que el usuario de la base de datos sea propietario del esquema en el momento de crearlo   |   CREATE SCHEMA `schema` AUTHORIZATION `user`   |   Actualmente no se admite el cambio de propiedad del esquema después de crearlo.   |   Versión 1.2 y posteriores   | 
|   Permitir que el usuario de la base de datos realice las operaciones SELECT/DML en un objeto   |   Conceder permiso al usuario de la base de datos en un objeto   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT::`object` TO `user`   |   Ninguno   |   Todas las versiones   | 
|   Permitir que el usuario de la base de datos realice las operaciones SELECT/DML/DDL en una base de datos, incluida la eliminación de la misma   |   Agregación de usuario al rol fijo de base de datos de db\$1owner   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   Solo se pueden agregar usuarios al rol fijo de base de datos de db\$1owner. Actualmente no se admite agregar roles al rol db\$1owner.   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permiso al usuario o a los miembros de un rol de base de datos personalizado para realizar solo operaciones SELECT en una base de datos   |   Agregación del usuario o rol al rol fijo de base de datos db\$1datareader   |   ALTER ROLE db\$1datareader ADD MEMBER `user` / `role`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permiso para que el usuario o los miembros de un rol de base de datos personalizado realicen solo operaciones DML en una base de datos   |   Agregación de usuario o rol al rol fijo de base de datos db\$1datawriter   |   ALTER ROLE db\$1datawriter ADD MEMBER `user` / `role`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permiso al usuario o a los miembros de un rol de base de datos personalizado para que realicen solo operaciones DDL en una base de datos   |   Agregación de usuario o rol al rol fijo de base de datos db\$1accessadmin   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permitir que el usuario o los miembros de un rol de base de datos personalizado solo puedan realizar las operaciones CREATE/ALTER/DROP roles personalizados, GRANT/REVOKE permisos sobre los objetos de una base de datos o CREATE SCHEMA en una base de datos   |   Agregación de usuario o rol al rol fijo de base de datos db\$1securityadmin   |   ALTER ROLE db\$1securityadmin ADD MEMBER `user` / `role`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permita que el usuario o los miembros de un rol de base de datos personalizado solo puedan realizar las acciones CREATE/ALTER/DROP cualquier usuario, conceder y revocar el acceso a la base de datos y asignar las cuentas de usuario a los inicios de sesión o CREATE SCHEMA en una base de datos   |   Agregación de usuario o rol al rol fijo de base de datos db\$1accessadmin   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permiso de inicio de sesión solo para las operaciones CREATE/DROP/ALTER en cualquier base de datos   |   Agregación de inicio de sesión al rol fijo del servidor dbcreator   |   ALTER SERVER ROLE dbcreator ADD MEMBER `login`   |   Solo se pueden modificar las bases de datos a las que tiene acceso el inicio de sesión de dbcreator.   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 
|   Permiso del inicio de sesión solo para las operaciones CREATE/ALTER/DROP en cualquier inicio de sesión   |   Agregación de inicio de sesión al rol fijo del servidor securityadmin   |   ALTER SERVER ROLE securityadmin ADD MEMBER `login`   |   Ninguno   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 

## Casos de uso no admitidos con las soluciones provisionales
<a name="babelfish-permissions-unsupported"></a>

 En la siguiente tabla, se explican los casos de uso que Babelfish no admite, pero que se pueden llevar a cabo con una solución provisional. 


|  Caso de uso  |  Action  |  Comandos SQL  |  Comentarios  |  Compatibilidad de versiones de Babelfish para soluciones alternativas  | 
| --- | --- | --- | --- | --- | 
|   Permiso al usuario para realizar operaciones SELECT/DML en un objeto/esquema junto con la opción de CONCEDER estos permisos a otros usuarios   |   CONCESIÓN de los permisos a todos los demás usuarios directamente   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT/SCHEMA::`object`/`schema` TO `user`   |   GRANT ... Actualmente no se admite WITH GRANT OPTION.   |   Versión 3.6 y posteriores, 4.2 y posteriores   | 
|   Permitir que el usuario de la base de datos realice las operaciones SELECT/DML/DDL en una base de datos, incluida la eliminación de la misma   |   Agregación de miembros del rol al rol fijo de base de datos db\$1owner   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   Actualmente no se admite la agregación de roles al rol db\$1owner.   |   Versión 4.5 y posteriores, 5.1 y posteriores   | 

## Casos de uso no admitidos
<a name="babelfish-permissions-unsupported"></a>

 En la siguiente tabla se explican los casos de uso no admitidos en Babelfish. 


|  Caso de uso  |  Comentarios  | 
| --- | --- | 
|  Denegación al usuario o a los miembros de un rol de base de datos personalizado de la posibilidad de realizar SELECT en una base de datos   |   Aún no se admite el rol fijo de base de datos db\$1denydatareader   | 
|  Denegación a un usuario o a los miembros de un rol de base de datos personalizado de la posibilidad de realizar DML en una base de datos   |   Actualmente no se admite el rol fijo de base de datos db\$1denydatawriter.   | 
|  Permiso del inicio de sesión solo para KILL en cualquier conexión de base de datos   |   Actualmente no se admite el rol fijo de servidor processadmin.   | 
|  Permiso del inicio de sesión solo para agregar o eliminar servidores enlazados   |   Actualmente no se admite el rol de servidor fijo setupadmin.   | 

# Tratamiento de las diferencias de propiedad de los objetos tras la actualización
<a name="babelfish-ownership-differences"></a>

Las versiones 4.6 y posteriores, y 5.2 y posteriores de Babelfish incluyen un cambio en el manejo de la propiedad de los objetos a través del punto de conexión de TDS. Al crear nuevos objetos a través del punto de conexión de TDS, estos objetos ahora son propiedad del propietario del esquema y no del usuario actual. Es posible que este cambio de propiedad afecte al comportamiento de los permisos de los objetos nuevos en comparación con los objetos existentes al actualizar desde versiones anteriores a la 4.6 o 5.2.

Para resolver estas diferencias de propiedad, Babelfish proporciona la función `sys.generate_alter_ownership_statements()`. Esta función genera instrucciones SQL que alinean la propiedad del objeto con la propiedad del esquema.

Tenga en cuenta las siguientes limitaciones al abordar la propiedad del objeto:
+ Los usuarios con permisos CREATE concedidos a través del punto de conexión de PostgreSQL no pueden crear objetos a través del punto de conexión de TDS en esos esquemas.
+ No se recomienda modificar los permisos de los objetos de T-SQL a través del punto de conexión de PostgreSQL, ya que podría provocar un comportamiento incorrecto de T-SQL.
+ Los permisos de acceso pueden diferir entre los objetos antiguos y los nuevos debido a la falta de coincidencia en su propiedad. Por ejemplo, tenga en cuenta un esquema propiedad de `sch_own` que incluye objetos propiedad de `dbo`. En este caso, los objetos propiedad de `dbo` que se crearon antes de la actualización podrían tener permisos de acceso diferentes en comparación con los objetos propiedad de `sch_own` que se crearon después de la actualización. Esto puede afectar a operaciones como SELECT e INSERT.

Si el clúster de base de datos incluye objetos creados en versiones de Babelfish anteriores a la 4.6 o 5.2, tenga en cuenta la posibilidad de alinear su propiedad.

**Tratamiento de las diferencias de propiedad de los objetos**

1. Conéctese a la base de datos `babelfish_db` en el clúster de base de datos mediante el punto de conexión de PostgreSQL.

1. Use el siguiente comando:

   ```
   SELECT * from sys.generate_alter_ownership_statements();
   ```

   Esto genera una lista de instrucciones SQL destinadas a estandarizar la propiedad entre los objetos.

1. Ejecute primero las instrucciones generadas en un entorno de prueba para validar su efecto antes de aplicarlas en el entorno de producción.

Le recomendamos que ejecute estas instrucciones para lograr un modelo de propiedad de objetos coherente en toda la base de datos.