
# 限制子账户只能看到具有权限的数据库清单
#### 操作场景
使用存储过程，将某个自定义数据库的权限授予由rdsuser账户创建的指定子账户，并限制该账户对其他数据库的可见性。限制之后，子账户对不具权限的数据库不可见，也无法对其进行相关操作。
#### 前提条件
成功连接RDS for SQL Server实例。关于连接华为云关系型数据库实例，请参考[连接实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_06.html)。
#### 约束
- 对于系统库，不可通过此存储过程进行授权给子账户。如果您试图为子账户授予系统库权限，系统将会有如下提示：
  ```
  Error DatabaseName. Please can not include in ('msdb','master','model','tempdb','rdsadmin') .
  ```
  
 
- 对于系统管理员账户，不可通过此存储过程进行授权。如果您试图为管理员账户授予任意数据库权限，系统将会有如下提示：
  ```
  Error Login. Please can not include in ('rdsadmin','rdsmirror','rdsbackup','rdsuser') .
  ```
  

- 若某个账户已经是指定数据库的用户，不可再通过此存储过程对该账户授予该数据库的权限。否则，系统将会有如下提示：
  ```
  The proposed new database owner is already a user or aliased in the database.
  ```
  这种情况下，您可以通过管理账户"rdsuser"将该子账户从该数据库中删除之后，再通过执行此存储过程进行授权。
  
- 若某个账户具有Create Any Database权限，则此存储过程对该账户不生效。
#### 操作步骤
执行以下命令，进行限制子账户查看数据库权限。
```
EXEC rdsadmin.dbo.rds_AUTHORIZATION_DatabaseForLogin '@DBName', '@Login';
```
- @ DBName：要授予权限的数据库。
- @ Login：要授予权限的账户。
为"user_1"账户授予数据库"testDB_1"的权限，示例如下：
```
EXEC rdsadmin.dbo.rds_AUTHORIZATION_DatabaseForLogin 'testDB_1', 'user_1';
```
授权成功之后，user_1将具备testDB_1的权限，对其**可见** 并可对其进行**操作** ；并且对其余无权限数据库保持**不可见且不可操作**。
