

# Concesión y revocación de privilegios de RDS para Db2
<a name="db2-granting-revoking-privileges"></a>

Los usuarios obtienen acceso a las bases de datos al pertenecer a grupos asociados a las bases de datos.

Utilice los siguientes procedimientos para conceder y revocar privilegios para controlar el acceso a la base de datos. 

Estos procedimientos utilizan IBM Db2 CLP en un equipo local para conectarse a una instancia de base de datos de RDS para Db2. Asegúrese de catalogar el nodo TCP/IP y la base de datos para conectarse a la instancia de base de datos de RDS para Db2 que se ejecuta en su equipo local. Para obtener más información, consulte [Conexión a la instancia de base de datos de Amazon RDS para Db2 con IBM Db2 CLP](db2-connecting-with-clp-client.md).

**Topics**
+ [Concesión a un usuario de acceso a su base de datos](#db2-granting-user-access)
+ [Cambio de la contraseña de un usuario](#db2-changing-user-password)
+ [Agregar grupos a un usuario](#db2-adding-group-to-user)
+ [Eliminación de grupos de un usuario](#db2-removing-groups-from-user)
+ [Eliminación de un usuario](#db2-removing-user)
+ [Mostrar usuarios](#db2-listing-users-database)
+ [Creación de un rol](#db2-creating-role)
+ [Concesión de un rol](#db2-granting-role)
+ [Revocación de un rol](#db2-revoking-role)
+ [Descarte de un rol](#db2-dropping-role)
+ [Concesión de autorización a la base de datos](#db2-granting-dbadmin-auth)
+ [Revocación de la autorización de una base de datos](#db2-revoking-dbadmin-auth)

## Concesión a un usuario de acceso a su base de datos
<a name="db2-granting-user-access"></a>

**Para conceder a un usuario acceso a su base de datos**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

   El resultado de este comando debería ser similar al siguiente ejemplo:

   ```
   Database Connection Information
       
   Database server        = DB2/LINUXX8664 11.5.8.0
   SQL authorization ID   = ADMIN
   Local database alias   = RDSADMIN
   ```

1. Agregue un usuario a su lista de autorización llamando a `rdsadmin.add_user`. Para obtener más información, consulte [rdsadmin.add\$1user](db2-sp-granting-revoking-privileges.md#db2-sp-add-user). 

   ```
   db2 "call rdsadmin.add_user(
       'username',
       'password',
       'group_name,group_name')"
   ```

1. (Opcional) Agregue grupos adicionales al usuario llamando a `rdsadmin.add_groups`. Para obtener más información, consulte [rdsadmin.add\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups). 

   ```
   db2 "call rdsadmin.add_groups(
       'username',
       'group_name,group_name')"
   ```

1. Confirme las autoridades que están disponibles para el usuario. En el siguiente ejemplo, sustituya *rds\$1database\$1alias*, *master\$1user* y *master\$1password* por su propia información. Además, sustituya *username* por el nombre de usuario del usuario.

   ```
   db2 terminate
   db2 connect to rds_database_alias user master_user using master_password
   db2 "SELECT SUBSTR(AUTHORITY,1,20) AUTHORITY, D_USER, D_GROUP, D_PUBLIC
          FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('username', 'U') ) AS T
          ORDER BY AUTHORITY"
   ```

   El resultado de este comando debería ser similar al siguiente ejemplo:

   ```
   AUTHORITY            D_USER D_GROUP D_PUBLIC
   -------------------- ------ ------- --------
   ACCESSCTRL           N      N       N
   BINDADD              N      N       N
   CONNECT              N      N       N
   CREATETAB            N      N       N
   CREATE_EXTERNAL_ROUT N      N       N
   CREATE_NOT_FENCED_RO N      N       N
   CREATE_SECURE_OBJECT N      N       N
   DATAACCESS           N      N       N
   DBADM                N      N       N
   EXPLAIN              N      N       N
   IMPLICIT_SCHEMA      N      N       N
   LOAD                 N      N       N
   QUIESCE_CONNECT      N      N       N
   SECADM               N      N       N
   SQLADM               N      N       N
   SYSADM               *      N       *
   SYSCTRL              *      N       *
   SYSMAINT             *      N       *
   SYSMON               *      N       *
   WLMADM               N      N       N
   ```

1. Otorgue los roles `ROLE_NULLID_PACKAGES`, `ROLE_TABLESPACES` y `ROLE_PROCEDURES` de RDS para Db2 al grupo al que agregó el usuario. Para obtener más información, consulte [Roles predeterminados de Amazon RDS para Db2](db2-default-roles.md).
**nota**  
Creamos instancias de base de datos RDS para Db2 en modo `RESTRICTIVE`. Por lo tanto, los roles `ROLE_NULLID_PACKAGES`, `ROLE_TABLESPACES` y `ROLE_PROCEDURES` de RDS para Db2 otorgan privilegios de ejecución en paquetes `NULLID` para IBM Db2 CLP y Dynamic SQL. Estas funciones también otorgan privilegios de usuario en los espacios de tabla. 

   1. Conexión a su base de datos Db2. En el siguiente ejemplo, sustituya *database\$1name*, *master\$1user* y *master\$1password* por su propia información.

      ```
      db2 connect to database_name user master_user using master_password
      ```

   1. Otorgue el rol `ROLE_NULLED_PACKAGES` a un grupo. En el siguiente ejemplo, reemplace *group\$1name* por el nombre del grupo al que quiera agregar el rol.

      ```
      db2 "grant role ROLE_NULLID_PACKAGES to group group_name"
      ```

   1. Otorgue el rol `ROLE_TABLESPACES` al mismo grupo. En el siguiente ejemplo, reemplace *group\$1name* por el nombre del grupo al que quiera agregar el rol.

      ```
      db2 "grant role ROLE_TABLESPACES to group group_name"
      ```

   1. Otorgue el rol `ROLE_PROCEDURES` al mismo grupo. En el siguiente ejemplo, reemplace *group\$1name* por el nombre del grupo al que quiera agregar el rol.

      ```
      db2 "grant role ROLE_PROCEDURES to group group_name"
      ```

1. Otorgue las autoridades `connect`, `bindadd`, `createtab` y `IMPLICIT_SCHEMA` al grupo al que agregó el usuario. En el siguiente ejemplo, reemplace *group\$1name* por el nombre del segundo grupo al que haya agregado el usuario.

   ```
   db2 "grant usage on workload SYSDEFAULTUSERWORKLOAD to public"
   db2 "grant connect, bindadd, createtab, implicit_schema on database to group group_name"
   ```

1. Repita los pasos 4 al 6 para cada grupo adicional al que haya agregado el usuario.

1. Pruebe el acceso del usuario conectándose como usuario, creando una tabla, insertando valores en la tabla y devolviendo los datos de la tabla. En el siguiente ejemplo, sustituya *rds\$1database\$1alias*, *username* y *password* por el nombre de la base de datos y el nombre de usuario y la contraseña del usuario.

   ```
   db2 connect to rds_database_alias user username using password
   db2 "create table t1(c1 int not null)"
   db2 "insert into t1 values (1),(2),(3),(4)"
   db2 "select * from t1"
   ```

## Cambio de la contraseña de un usuario
<a name="db2-changing-user-password"></a>

**Para cambiar la contraseña de un usuario**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información. 

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Cambie la contraseña llamando a `rdsadmin.change_password`. Para obtener más información, consulte [rdsadmin.change\$1password](db2-sp-granting-revoking-privileges.md#db2-sp-change-password). 

   ```
   db2 "call rdsadmin.change_password(
       'username',
       'new_password')"
   ```

## Agregar grupos a un usuario
<a name="db2-adding-group-to-user"></a>

**Para agregar grupos a un usuario**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información. 

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Agregue grupos a un usuario mediante una llamada a `rdsadmin.add_groups`. Para obtener más información, consulte [rdsadmin.add\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups). 

   ```
   db2 "call rdsadmin.add_groups(
       'username',
       'group_name,group_name')"
   ```

## Eliminación de grupos de un usuario
<a name="db2-removing-groups-from-user"></a>

**Para eliminar grupos de un usuario**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información. 

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Elimine grupos llamando a `rdsadmin.remove_groups`. Para obtener más información, consulte [rdsadmin.remove\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-remove-groups). 

   ```
   db2 "call rdsadmin.remove_groups(
       'username',
       'group_name,group_name')"
   ```

## Eliminación de un usuario
<a name="db2-removing-user"></a>

**Para eliminar un usuario de la lista de autorizaciones**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información. 

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Elimine un usuario de la lista de autorización llamando a `rdsadmin.remove_user`. Para obtener más información, consulte [rdsadmin.remove\$1user](db2-sp-granting-revoking-privileges.md#db2-sp-remove-user). 

   ```
   db2 "call rdsadmin.remove_user('username')"
   ```

## Mostrar usuarios
<a name="db2-listing-users-database"></a>

Para mostrar los usuarios en una lista de autorización, llame al procedimiento almacenado `rdsadmin.list_users`. Para obtener más información, consulte [rdsadmin.list\$1users](db2-sp-granting-revoking-privileges.md#db2-sp-list-users).

```
db2 "call rdsadmin.list_users()"
```

## Creación de un rol
<a name="db2-creating-role"></a>

Puede utilizar el procedimiento almacenado [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) para crear un rol.

**Para crear un rol**

1. Conéctese a la base de datos `rdsadmin`. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Configure Db2 para generar contenido.

   ```
   db2 set serveroutput on 
   ```

1. Crear un rol. Para obtener más información, consulte [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role).

   ```
   db2 "call rdsadmin.create_role(
       'database_name',
       'role_name')"
   ```

1. Configure Db2 para que no genere contenido.

   ```
   db2 set serveroutput off
   ```

## Concesión de un rol
<a name="db2-granting-role"></a>

Puede usar el procedimiento almacenado [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) para asignar un rol a un rol, usuario o grupo.

**Asignación de un rol**

1. Conéctese a la base de datos `rdsadmin`. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Configure Db2 para generar contenido.

   ```
   db2 set serveroutput on 
   ```

1. Asigne un rol. Para obtener más información, consulte [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role).

   ```
   db2 "call rdsadmin.grant_role(
       'database_name',
       'role_name',
       'grantee',
       'admin_option')"
   ```

1. Configure Db2 para que no genere contenido.

   ```
   db2 set serveroutput off
   ```

## Revocación de un rol
<a name="db2-revoking-role"></a>

Puede usar el procedimiento almacenado [rdsadmin.revoke\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role) para revocar un rol a un rol, usuario o grupo.

**Revocación de un rol**

1. Conéctese a la base de datos `rdsadmin`. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Revoque un rol. Para obtener más información, consulte [rdsadmin.revoke\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role).

   ```
   db2 "call rdsadmin.revoke_role(
       ?,
       'database_name',
       'role_name',
       'grantee')"
   ```

## Descarte de un rol
<a name="db2-dropping-role"></a>

Puede utilizar el procedimiento [rdsadmin.drop\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role) almacenado para descartar un rol.

**Descarte de un rol**

1. Conéctese a la base de datos `rdsadmin`. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Descartar un rol. Para obtener más información, consulte [rdsadmin.drop\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role).

   ```
   db2 "call rdsadmin.drop_role(
       ?,
       'database_name',
       'role_name')"
   ```

## Concesión de autorización a la base de datos
<a name="db2-granting-dbadmin-auth"></a>

El usuario maestro, que tiene la autorización `DBADM`, puede conceder autorización `DBADM`, `ACCESSCTRL` o `DATAACCESS` a un rol, usuario o grupo.

**Para conceder autorización a la base de datos**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Conceda acceso a un usuario llamando a `rdsadmin.dbadm_grant`. Para obtener más información, consulte [rdsadmin.dbadm\$1grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant). 

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       'database_name,
       'authorization',
       'grantee')"
   ```

**Ejemplo de caso de uso**

El siguiente procedimiento le mostrará cómo crear un rol, conceder la autorización `DBADM` al rol, asignar el rol a un usuario y conceder el rol a un grupo.

****

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Cree un rol llamado `PROD_ROLE` para una base de datos llamada `TESTDB`. Para obtener más información, consulte [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role). 

   ```
   db2 "call rdsadmin.create_role(
       'TESTDB',
       'PROD_ROLE')"
   ```

1. Asigne el rol a un usuario llamado `PROD_USER`. El `PROD_USER` recibe la autorización de administrador para asignar roles. Para obtener más información, consulte [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role). 

   ```
   db2 "call rdsadmin.grant_role(
       ?,
       'TESTDB',
       'PROD_ROLE',
       'USER PROD_USER',
       'Y')"
   ```

1. (Opcional) Proporcione autorizaciones o privilegios adicionales. En el siguiente ejemplo, se concede la autorización `DBADM` a un rol llamado `PROD_ROLE` para una base de datos llamada `FUNDPROD`. Para obtener más información, consulte [rdsadmin.dbadm\$1grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant). 

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       'FUNDPROD',
       'DBADM',
       'ROLE PROD_ROLE')"
   ```

1. Finalice la sesión.

   ```
   db2 terminate
   ```

1. Conéctese a la base de datos `TESTDB` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información.

   ```
   db2 connect to TESTDB user master_username using master_password
   ```

1. Agregue más autorizaciones al rol.

   ```
   db2 "grant connect, implicit_schema on database to role PROD_ROLE"
   ```

1. Otorgue el rol `PROD_ROLE` a un grupo.

   ```
   db2 "grant role PROD_ROLE to group PRODGRP"
   ```

Los usuarios que pertenecen al grupo `PRODGRP` ahora pueden realizar acciones como conectarse a la base de datos de `TESTDB`, crear tablas o crear esquemas.

## Revocación de la autorización de una base de datos
<a name="db2-revoking-dbadmin-auth"></a>

El usuario maestro, que tiene la autorización `DBADM`, puede revocar la autorización `DBADM`, `ACCESSCTRL` o `DATAACCESS` a un rol, usuario o grupo.

**Para revocar una autorización de una base de datos**

1. Conéctese a la base de datos `rdsadmin` con el nombre de usuario y la contraseña maestros de su instancia de base de datos de RDS para Db2. En el siguiente ejemplo, sustituya *master\$1username* y *master\$1password* por su propia información.

   ```
   db2 connect to rdsadmin user master_username using master_password
   ```

1. Revoque el acceso de los usuarios llamando a `rdsadmin.dbadm_revoke`. Para obtener más información, consulte [rdsadmin.dbadm\$1revoke](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-revoke). 

   ```
   db2 "call rdsadmin.dbadm_revoke(
       ?,
       'database_name,
       'authorization',
       'grantee')"
   ```