授予和撤销对 RDS for Db2 的权限 - Amazon Relational Database Service

授予和撤销对 RDS for Db2 的权限

用户通过附加到数据库的组中的成员资格获得对数据库的访问权限。

使用以下过程授予和撤销用于控制数据库访问权限的权限。

这些过程使用在本地计算机上运行的 IBM Db2 CLP 连接到 RDS for Db2 数据库实例。请务必对 TCPIP 节点和数据库进行编目,以连接到在本地计算机上运行的 RDS for Db2 数据库实例。有关更多信息,请参阅 使用 IBM Db2 CLP 连接到 Amazon RDS for Db2 数据库实例

授予用户访问您的数据库的权限

授予用户访问您的数据库的权限
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password

    此命令生成类似于以下示例的输出:

    Database Connection Information Database server = DB2/LINUXX8664 11.5.8.0 SQL authorization ID = ADMIN Local database alias = RDSADMIN
  2. 通过调用 rdsadmin.add_user 将用户添加到您的授权列表。有关更多信息,请参阅 rdsadmin.add_user

    db2 "call rdsadmin.add_user( 'username', 'password', 'group_name,group_name')"
  3. (可选)通过调用 rdsadmin.add_groups 向用户添加其它组。有关更多信息,请参阅 rdsadmin.add_groups

    db2 "call rdsadmin.add_groups( 'username', 'group_name,group_name')"
  4. 确认用户可用的权限。在以下示例中,用您自己的信息替换 rds_database_aliasmaster_usermaster_password。另外,将 username 替换为用户的用户名。

    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"

    此命令生成类似于以下示例的输出:

    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
  5. 将 RDS for Db2 角色 ROLE_NULLID_PACKAGESROLE_TABLESPACESROLE_PROCEDURES 授予您向其添加用户的组。有关更多信息,请参阅 Amazon RDS for Db2 默认角色

    注意

    我们在 RESTRICTIVE 模式下创建 RDS for Db2 数据库实例。因此,RDS for Db2 角色 ROLE_NULLID_PACKAGESROLE_TABLESPACESROLE_PROCEDURES 授予对 IBM Db2 CLP 和 Dynamic SQL 的 NULLID 软件包的执行权限。这些角色还授予用户对表空间的权限。

    1. 连接到 Db2 数据库。在以下示例中,用您自己的信息替换 database_namemaster_usermaster_password

      db2 connect to database_name user master_user using master_password
    2. 将角色 ROLE_NULLED_PACKAGES 授予组。在以下示例中,将 group_name 替换为您要向其中添加该角色的组的名称。

      db2 "grant role ROLE_NULLID_PACKAGES to group group_name"
    3. 将角色 ROLE_TABLESPACES 授予同一个组。在以下示例中,将 group_name 替换为您要向其中添加该角色的组的名称。

      db2 "grant role ROLE_TABLESPACES to group group_name"
    4. 将角色 ROLE_PROCEDURES 授予同一个组。在以下示例中,将 group_name 替换为您要向其中添加该角色的组的名称。

      db2 "grant role ROLE_PROCEDURES to group group_name"
  6. 向已将用户添加到的组授予 connectbindaddcreatetabIMPLICIT_SCHEMA 权限。在以下示例中,将 group_name 替换为将用户添加到的第二个组的名称。

    db2 "grant usage on workload SYSDEFAULTUSERWORKLOAD to public" db2 "grant connect, bindadd, createtab, implicit_schema on database to group group_name"
  7. 对将用户添加到的每个其它组重复步骤 4 到 6。

  8. 通过以用户身份进行连接、创建表、向表中插入值以及从表中返回数据,测试用户的访问权限。在以下示例中,将 rds_database_aliasusernamepassword 替换为数据库的名称以及用户的用户名和密码。

    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"

更改用户的密码

更改用户的密码
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.change_password 更改密码。有关更多信息,请参阅 rdsadmin.change_password

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

向用户添加组

向用户添加组
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.add_groups 向用户添加组。有关更多信息,请参阅 rdsadmin.add_groups

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

从用户中删除组

从用户中删除组
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.remove_groups 删除组。有关更多信息,请参阅 rdsadmin.remove_groups

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

删除用户

从授权列表中删除用户
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.remove_user 将用户从您的授权列表中删除。有关更多信息,请参阅 rdsadmin.remove_user

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

列出用户

要列出授权列表上的用户,请调用 rdsadmin.list_users 存储过程。有关更多信息,请参阅 rdsadmin.list_users

db2 "call rdsadmin.list_users()"

创建角色

您可以使用 rdsadmin.create_role 存储过程创建角色。

创建角色
  1. 连接到 rdsadmin 数据库。在以下示例中,用您的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 将 Db2 设置为输出内容。

    db2 set serveroutput on
  3. 创建角色。有关更多信息,请参阅 rdsadmin.create_role

    db2 "call rdsadmin.create_role( 'database_name', 'role_name')"
  4. 将 Db2 设置为不输出内容。

    db2 set serveroutput off

授予角色

您可以使用 rdsadmin.grant_role 存储过程为角色、用户或组分配角色。

分配角色
  1. 连接到 rdsadmin 数据库。在以下示例中,用您的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 将 Db2 设置为输出内容。

    db2 set serveroutput on
  3. 分配角色。有关更多信息,请参阅 rdsadmin.grant_role

    db2 "call rdsadmin.grant_role( 'database_name', 'role_name', 'grantee', 'admin_option')"
  4. 将 Db2 设置为不输出内容。

    db2 set serveroutput off

撤销角色

您可以使用 rdsadmin.revoke_role 存储过程从角色、用户或组撤销角色。

撤销角色
  1. 连接到 rdsadmin 数据库。在以下示例中,用您的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 撤销角色。有关更多信息,请参阅 rdsadmin.revoke_role

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

授予数据库授权

拥有 DBADM 授权的主用户可以向角色、用户或组授予 DBADMACCESSCTRLDATAACCESS 授权。

授予数据库授权
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.dbadm_grant 授予用户访问权限。有关更多信息,请参阅 rdsadmin.dbadm_grant

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

使用案例示例

以下过程将引导您完成创建角色、向该角色授予 DBADM 授权、将该角色分配给用户以及将该角色授予组。

  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 为名为 TESTDB 的数据库创建一个名为 PROD_ROLE 的角色。有关更多信息,请参阅 rdsadmin.create_role

    db2 "call rdsadmin.create_role( 'TESTDB', 'PROD_ROLE')"
  3. 将该角色分配给名为 PROD_USER 的用户。PROD_USER 已获得分配角色的管理员授权。有关更多信息,请参阅 rdsadmin.grant_role

    db2 "call rdsadmin.grant_role( ?, 'TESTDB', 'PROD_ROLE', 'USER PROD_USER', 'Y')"
  4. (可选)提供其它授权或权限。以下示例针对名为 FUNDPROD 的数据库向名为 PROD_ROLE 的角色授予 DBADM 授权。有关更多信息,请参阅 rdsadmin.dbadm_grant

    db2 "call rdsadmin.dbadm_grant( ?, 'FUNDPROD', 'DBADM', 'ROLE PROD_ROLE')"
  5. 终止会话。

    db2 terminate
  6. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 TESTDB 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to TESTDB user master_username using master_password
  7. 向该角色添加更多授权。

    db2 "grant connect, implicit_schema on database to role PROD_ROLE"
  8. 将角色 PROD_ROLE 授予组。

    db2 "grant role PROD_ROLE to group PRODGRP"

属于组 PRODGRP 的用户现在可以执行诸如连接到 TESTDB 数据库、创建表或创建架构之类的操作。

撤销数据库授权

拥有 DBADM 授权的主用户可以从角色、用户或组撤销 DBADMACCESSCTRLDATAACCESS 授权。

撤销数据库授权
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.dbadm_revoke 撤销用户访问权限。有关更多信息,请参阅 rdsadmin.dbadm_revoke

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