

# 用于对 RDS for Db2 授予和撤销权限的存储过程
<a name="db2-sp-granting-revoking-privileges"></a>

本主题中介绍的内置存储过程可管理 Amazon RDS for Db2 数据库的用户、角色、组和授权。要运行这些过程，主用户必须先连接到 `rdsadmin` 数据库。

有关使用这些存储过程的任务，请参阅[授予和撤销权限](db2-granting-revoking-privileges.md)和[设置 Kerberos 身份验证](db2-kerberos-setting-up.md)。

请参阅以下内置存储过程，了解其语法、参数、用法说明和示例。

**Topics**
+ [rdsadmin.create\$1role](#db2-sp-create-role)
+ [rdsadmin.grant\$1role](#db2-sp-grant-role)
+ [rdsadmin.revoke\$1role](#db2-sp-revoke-role)
+ [rdsadmin.drop\$1role](#db2-sp-drop-role)
+ [rdsadmin.add\$1user](#db2-sp-add-user)
+ [rdsadmin.change\$1password](#db2-sp-change-password)
+ [rdsadmin.list\$1users](#db2-sp-list-users)
+ [rdsadmin.remove\$1user](#db2-sp-remove-user)
+ [rdsadmin.add\$1groups](#db2-sp-add-groups)
+ [rdsadmin.remove\$1groups](#db2-sp-remove-groups)
+ [rdsadmin.dbadm\$1grant](#db2-sp-dbadm-grant)
+ [rdsadmin.dbadm\$1revoke](#db2-sp-dbadm-revoke)
+ [rdsadmin.set\$1sid\$1group\$1mapping](#db2-sp-set-sid-group-mapping)
+ [rdsadmin.list\$1sid\$1group\$1mapping](#db2-sp-list-sid-group-mapping)
+ [rdsadmin.remove\$1sid\$1group\$1mapping](#db2-sp-remove-sid-group-mapping)

## rdsadmin.create\$1role
<a name="db2-sp-create-role"></a>

创建角色。

### 语法
<a name="db2-sp-create-role-syntax"></a>

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

### 参数
<a name="db2-sp-create-role-parameters"></a>

以下参数为必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*role\$1name*  
您要创建的角色的名称。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-create-role-usage-notes"></a>

有关检查创建角色的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-create-role-examples"></a>

以下示例为数据库 `DB2DB` 创建一个名为 `MY_ROLE` 的角色。

```
db2 "call rdsadmin.create_role(
    'DB2DB',
    'MY_ROLE')"
```

## rdsadmin.grant\$1role
<a name="db2-sp-grant-role"></a>

将角色分配给角色、用户或组。

### 语法
<a name="db2-sp-grant-role-syntax"></a>

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

### 参数
<a name="db2-sp-grant-role-parameters"></a>

以下输出参数是必需参数：

?  
一个参数标记，用于输出任务的唯一标识符。此参数仅接受 `?`。

以下输入参数是必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*role\$1name*  
您要创建的角色的名称。数据类型为 `varchar`。

*grantee*  
要接收授权的角色、用户或组。数据类型为 `varchar`。有效值：`ROLE`、`USER`、`GROUP`、`PUBLIC`。  
格式必须是值后跟名称。用英文逗号分隔多个值和名称。示例：“`USER user1, user2, GROUP group1, group2`”。将名称替换为您自己的信息。

以下输入参数为可选参数：

*admin\$1option*  
指定被授权者 `ROLE` 是否具有分配角色的 `DBADM` 授权。数据类型为 `char`。默认值为 `N`。

### 使用说明
<a name="db2-sp-grant-role-usage-notes"></a>

有关检查分配角色的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-grant-role-examples"></a>

**示例 1：为角色、用户和组分配角色并授予权限**

下面的示例将对于数据库 `TESTDB` 的名为 `ROLE_TEST` 的角色分配给名为 `role1` 的角色、名为 `user1` 的用户和名为 `group1` 的组。`ROLE_TEST` 获得分配角色的管理员授权。

```
db2 "call rdsadmin.grant_role(
    ?,
    'TESTDB',
    'ROLE_TEST',
    'ROLE role1, USER user1, GROUP group1',
    'Y')"
```

**示例 2：为角色分配 `PUBLIC` 但不授予权限**

下面的示例将针对数据库 `TESTDB` 的名为 `ROLE_TEST` 的角色分配给 `PUBLIC`。`ROLE_TEST` 未获得分配角色的管理员授权。

```
db2 "call rdsadmin.grant_role(
    ?,
    'TESTDB',
    'ROLE_TEST',
    'PUBLIC')"
```

## rdsadmin.revoke\$1role
<a name="db2-sp-revoke-role"></a>

从角色、用户或组撤销角色。

### 语法
<a name="db2-sp-revoke-role-syntax"></a>

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

### 参数
<a name="db2-sp-revoke-role-parameters"></a>

以下输出参数是必需参数：

?  
一个参数标记，用于输出任务的唯一标识符。此参数仅接受 ?。

以下输入参数是必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*role\$1name*  
您要撤销的角色的名称。数据类型为 `varchar`。

*grantee*  
要失去授权的角色、用户或组。数据类型为 `varchar`。有效值：`ROLE`、`USER`、`GROUP`、`PUBLIC`。  
格式必须是值后跟名称。用英文逗号分隔多个值和名称。示例：“`USER user1, user2, GROUP group1, group2`”。将名称替换为您自己的信息。

### 使用说明
<a name="db2-sp-revoke-role-usage-notes"></a>

有关如何检查角色撤销状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-revoke-role-examples"></a>

**示例 1：从角色、用户和组中撤消角色**

以下示例从名为 `role1` 的角色、名为 `user1` 的用户和名为 `group1` 的组中撤销数据库 `TESTDB` 的名为 `ROLE_TEST` 的角色。

```
db2 "call rdsadmin.revoke_role(
    ?,
    'TESTDB',
    'ROLE_TEST',
    'ROLE role1, USER user1, GROUP group1')"
```

**示例 2：从 `PUBLIC` 撤消角色**

以下示例从 `PUBLIC` 撤销数据库 `TESTDB` 的名为 `ROLE_TEST` 的角色。

```
db2 "call rdsadmin.revoke_role(
    ?,
    'TESTDB',
    'ROLE_TEST',
    'PUBLIC')"
```

## rdsadmin.drop\$1role
<a name="db2-sp-drop-role"></a>

删除角色。

### 语法
<a name="db2-sp-drop-role-syntax"></a>

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

### 参数
<a name="db2-sp-drop-role-parameters"></a>

以下输出参数是必需参数：

?  
一个参数标记，用于输出任务的唯一标识符。此参数仅接受 ?。

以下输入参数是必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*role\$1name*  
您要删除的角色的名称。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-drop-role-usage-notes"></a>

有关如何检查角色删除状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-drop-role-examples"></a>

以下示例删除数据库 `TESTDB` 中名为 `ROLE_TEST` 的角色。

```
db2 "call rdsadmin.drop_role(
    ?,
    'TESTDB',
    'ROLE_TEST')"
```

## rdsadmin.add\$1user
<a name="db2-sp-add-user"></a>

将用户添加到授权列表。

### 语法
<a name="db2-sp-add-user-syntax"></a>

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

### 参数
<a name="db2-sp-add-user-parameters"></a>

以下参数为必需参数：

*“username*”  
用户的用户名。数据类型为 `varchar`。

* 密码*  
用户的密码。数据类型为 `varchar`。

以下参数为可选参数：

*group\$1name*  
要将用户添加到的组的名称。数据类型为 `varchar`。默认值是空字符串或 Null。

### 使用说明
<a name="db2-sp-add-user-usage-notes"></a>

您可以将用户添加到一个组，也可以通过用逗号分隔组名称添加到多个组。

您可以在创建新用户时创建组，也可以在[向现有用户添加组](db2-granting-revoking-privileges.md#add-group-to-user)时创建组。无法单独创建组。

**注意**  
您可以通过调用 `rdsadmin.add_user` 添加的最大用户数为 5000。

有关检查添加用户的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-add-user-examples"></a>

以下示例创建了一个名为 `jorge_souza` 的用户，并将该用户分配给名为 `sales` 和 `inside_sales` 的组。

```
db2 "call rdsadmin.add_user(
    'jorge_souza',
    '*******',
    'sales,inside_sales')"
```

## rdsadmin.change\$1password
<a name="db2-sp-change-password"></a>

更改用户的密码。

### 语法
<a name="db2-sp-change-password-syntax"></a>

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

### 参数
<a name="db2-sp-change-password-parameters"></a>

以下参数为必需参数：

*“username*”  
用户的用户名。数据类型为 `varchar`。

*new\$1password*  
用户的新密码。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-change-password-usage-notes"></a>

有关检查更改密码的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-change-password-examples"></a>

以下示例更改 `jorge_souza` 的密码。

```
db2 "call rdsadmin.change_password(
    'jorge_souza',
    '*******')"
```

## rdsadmin.list\$1users
<a name="db2-sp-list-users"></a>

列出授权列表中的用户。

### 语法
<a name="db2-sp-list-users-syntax"></a>

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

### 使用说明
<a name="db2-sp-list-users-usage-notes"></a>

有关检查列出用户的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

## rdsadmin.remove\$1user
<a name="db2-sp-remove-user"></a>

将用户从授权列表中移除。

### 语法
<a name="db2-sp-remove-user-syntax"></a>

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

### 参数
<a name="db2-sp-remove-user-parameters"></a>

以下参数是必需参数：

*“username*”  
用户的用户名。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-remove-user-usage-notes"></a>

有关检查移除用户的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-remove-user-examples"></a>

以下示例移除 `jorge_souza` 访问 RDS for Db2 数据库实例中的数据库的权限。

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

## rdsadmin.add\$1groups
<a name="db2-sp-add-groups"></a>

向用户添加组。

### 语法
<a name="db2-sp-add-groups-syntax"></a>

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

### 参数
<a name="db2-sp-add-groups-parameters"></a>

以下参数为必需参数：

*“username*”  
用户的用户名。数据类型为 `varchar`。

*group\$1name*  
要将用户添加到的组的名称。数据类型为 `varchar`。默认值是空字符串。

### 使用说明
<a name="db2-sp-add-groups-usage-notes"></a>

您可以向用户添加一个组，也通过用逗号分隔组名称来添加多个组。有关检查添加组的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-add-groups-examples"></a>

以下示例将 `direct_sales` 和 `b2b_sales` 组添加到用户 `jorge_souza`。

```
db2 "call rdsadmin.add_groups(
    'jorge_souza',
    'direct_sales,b2b_sales')"
```

## rdsadmin.remove\$1groups
<a name="db2-sp-remove-groups"></a>

从用户中移除组。

### 语法
<a name="db2-sp-remove-groups-syntax"></a>

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

### 参数
<a name="db2-sp-remove-groups-parameters"></a>

以下参数为必需参数：

*“username*”  
用户的用户名。数据类型为 `varchar`。

*group\$1name*  
要从中移除用户的组的名称。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-remove-groups-usage-notes"></a>

可以从用户中移除一个组，也可以通过用逗号分隔组名称来移除多个组。

有关检查移除组的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-remove-groups-examples"></a>

以下示例从用户 `jorge_souza` 中移除 `direct_sales` 和 `b2b_sales` 组。

```
db2 "call rdsadmin.remove_groups(
    'jorge_souza',
    'direct_sales,b2b_sales')"
```

## rdsadmin.dbadm\$1grant
<a name="db2-sp-dbadm-grant"></a>

向角色、用户或组授予 `DBADM`、`ACCESSCTRL` 或 `DATAACCESS` 授权。

### 语法
<a name="db2-sp-dbadm-grant-syntax"></a>

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

### 参数
<a name="db2-sp-dbadm-grant-parameters"></a>

以下输出参数是必需参数：

?  
一个参数标记，用于输出任务的唯一标识符。此参数仅接受 `?`。

以下输入参数是必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*authorization*、\$1  
要授予的授权类型。数据类型为 `varchar`。有效值：`DBADM`、`ACCESSCTRL`、`DATAACCESS`。  
使用逗号分隔多个类型。

*grantee*  
要接收授权的角色、用户或组。数据类型为 `varchar`。有效值：`ROLE`、`USER`、`GROUP`。  
格式必须是值后跟名称。用英文逗号分隔多个值和名称。示例：“`USER user1, user2, GROUP group1, group2`”。将名称替换为您自己的信息。

### 使用说明
<a name="db2-sp-dbadm-grant-usage-notes"></a>

接收访问权限的角色必须存在。

有关检查授予数据库管理员访问权限的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-dbadm-grant-examples"></a>

**示例 1：向角色授予数据库管理员访问权限**

以下示例向名为 `TESTDB` 的数据库中的 `ROLE_DBA` 角色授予数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_grant(
    ?, 
    'TESTDB',
    'DBADM',
    'ROLE ROLE_DBA')"
```

**示例 2：向用户和组授予数据库管理员访问权限**

以下示例向名为 `TESTDB` 的数据库中的 `user1` 和 `group1` 授予数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_grant(
    ?, 
    'TESTDB', 
    'DBADM', 
    'USER user1, GROUP group1')"
```

**示例 3：向多个用户和组授予数据库管理员访问权限**

以下示例向名为 `TESTDB` 的数据库中的 `user1`、`user2`、`group1` 和 `group2` 授予数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_grant(
    ?, 
    'TESTDB', 
    'DBADM', 
    'USER user1, user2, GROUP group1, group2')"
```

## rdsadmin.dbadm\$1revoke
<a name="db2-sp-dbadm-revoke"></a>

从角色、用户或组撤销 `DBADM`、`ACCESSCTRL` 或 `DATAACCESS` 授权。

### 语法
<a name="db2-sp-dbadm-revoke-syntax"></a>

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

### 参数
<a name="db2-sp-dbadm-revoke-parameters"></a>

以下输出参数是必需参数：

?  
任务的唯一标识符。此参数仅接受 `?`。

以下输入参数是必需参数：

*database\$1name*  
命令将在其上运行的数据库的名称。数据类型为 `varchar`。

*authorization*、\$1  
要撤销的授权类型。数据类型为 `varchar`。有效值：`DBADM`、`ACCESSCTRL`、`DATAACCESS`。  
使用逗号分隔多个类型。

*grantee*  
要从中撤销授权的角色、用户或组。数据类型为 `varchar`。有效值：`ROLE`、`USER`、`GROUP`。  
格式必须是值后跟名称。用英文逗号分隔多个值和名称。示例：“`USER user1, user2, GROUP group1, group2`”。将名称替换为您自己的信息。

### 使用说明
<a name="db2-sp-dbadm-revoke-usage-notes"></a>

有关检查撤销数据库管理员访问权限的状态的信息，请参阅[rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-dbadm-revoke-examples"></a>

**示例 1：撤消角色的数据库管理员访问权限**

以下示例对名为 `TESTDB` 的数据库中的 `ROLE_DBA` 角色撤销数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_revoke(
    ?, 
    'TESTDB',
    'DBADM',
    'ROLE ROLE_DBA')"
```

**示例 2：撤消用户和群组的数据库管理员访问权限**

以下示例对名为 `TESTDB` 的数据库中的 `user1` 和 `group1` 撤销数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_revoke(
    ?, 
    'TESTDB', 
    'DBADM', 
    'USER user1, GROUP group1')"
```

**示例 3：撤消多个用户和组的数据库管理员访问权限**

以下示例对名为 `TESTDB` 的数据库中的 `user1`、`user2`、`group1` 和 `group2` 撤销数据库管理员访问权限。

```
db2 "call rdsadmin.dbadm_revoke(
    ?, 
    'TESTDB', 
    'DBADM', 
    'USER user1, user2, GROUP group1, group2')"
```

## rdsadmin.set\$1sid\$1group\$1mapping
<a name="db2-sp-set-sid-group-mapping"></a>

在安全 ID（SID）与相应的 Active Directory 组之间创建映射。

### 语法
<a name="db2-sp-set-sid-group-mapping-syntax"></a>

```
db2 "call rdsadmin.set_sid_group_mapping(
    ?,
    'SID',
    'group_name')"
```

### 参数
<a name="db2-sp-set-sid-group-mapping-parameters"></a>

以下输出参数是必需参数：

?  
输出错误消息的参数标记。此参数仅接受 `?`。

以下输入参数是必需参数：

*SID* ()  
安全 ID（SID）。数据类型为 `varchar`。

*group\$1name*  
要映射到 SID 的 Active Directory 组的名称。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-set-sid-group-mapping-usage-notes"></a>

使用此存储过程对 Active Directory 组启用 Kerberos 身份验证。如果映射中已存在 `SID` 或 `group_name`，则此存储过程将失败。

有关如何查找组的 SID 的信息，请参阅[步骤 8：在 PowerShell 中检索 Active Directory 组 SID步骤 8：在 PowerShell 中检索 Active Directory 组 SID](db2-kerberos-setting-up.md#db2-kerberos-setting-up-retrieve-ad-group-sid)。

有关检查创建映射的状态的信息，请参阅 [rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-set-sid-group-mapping-examples"></a>

以下示例将 SID 映射到名为 `my_group` 的组。

```
db2 "call rdsadmin.set_sid_group_mapping(
    ?,
    'S-1-5-21-9146495592-531070549-834388463-513',
    'my_group')"
```

## rdsadmin.list\$1sid\$1group\$1mapping
<a name="db2-sp-list-sid-group-mapping"></a>

列出在数据库实例上配置的所有安全 ID（SID）与 Active Directory 组的映射。

### 语法
<a name="db2-sp-list-sid-group-mapping-syntax"></a>

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

### 使用说明
<a name="db2-sp-list-sid-group-mapping-usage-notes"></a>

有关检查列出映射的状态的信息，请参阅 [rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

## rdsadmin.remove\$1sid\$1group\$1mapping
<a name="db2-sp-remove-sid-group-mapping"></a>

从数据库实例中移除安全 ID（SID）与其相应 Active Directory 组的映射。

### 语法
<a name="db2-sp-remove-sid-group-mapping-syntax"></a>

```
db2 "call rdsadmin.remove_sid_group_mapping(
    ?,
    'SID')"
```

### 参数
<a name="db2-sp-remove-sid-group-mapping-parameters"></a>

以下输出参数是必需参数：

?  
输出错误消息的参数标记。此参数仅接受 `?`。

以下输入参数是必需参数：

*SID* ()  
安全 ID（SID）。数据类型为 `varchar`。

### 使用说明
<a name="db2-sp-remove-sid-group-mapping-usage-notes"></a>

有关如何查找组的 SID 的信息，请参阅[步骤 8：在 PowerShell 中检索 Active Directory 组 SID步骤 8：在 PowerShell 中检索 Active Directory 组 SID](db2-kerberos-setting-up.md#db2-kerberos-setting-up-retrieve-ad-group-sid)。

有关检查移除映射的状态的信息，请参阅 [rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。

### 示例
<a name="db2-sp-remove-sid-group-mapping-examples"></a>

以下示例从 SID 映射到的组中移除其映射。

```
db2 "call rdsadmin.remove_sid_group_mapping(
    ?,
    'S-1-5-21-9146495592-531070549-834388463-513')"
```