

# 利用 AD 安全组成员资格的权限
<a name="babelfish-kerberos-securityad-privileges"></a>

## 继承服务器级权限
<a name="babelfish-kerberos-securityad-inheritpriv-server"></a>

 属于给定 AD 安全组成员的 AD 用户将继承向映射的 Windows 组登录名授予的服务器级权限。例如，考虑 `accounts-group` AD 安全组，该安全组被授予 Babelfish 上 `sysadmin` 服务器角色的成员资格。可以使用以下命令继承服务器级权限：

```
1> ALTER SERVER ROLE sysadmin ADD MEMBER [corp\accounts-group];
```

 因此，属于 `accounts-group` AD 安全组成员的任何 Active Directory 用户都将继承与 `sysadmin` 角色关联的服务器级权限。这意味着，像 `corp\user1` 这样的用户（属于 `accounts-group` 的成员）现在可以在 Babelfish 中执行服务器级操作。

**注意**  
 要执行服务器级 DDL，单独 AD 用户的 Windows 登录名必须存在。有关更多信息，请参阅 [限制](babelfish-kerberos-securityad-limitations.md)。

## 继承数据库级权限
<a name="babelfish-kerberos-securityad-inheritpriv-database"></a>

 要授予数据库级权限，必须创建数据库用户并使用 Windows 组登录名进行映射。属于给定 AD 安全组成员的 AD 用户将继承授予该数据库用户的数据库级权限。在以下示例中，可以看到 Windows 组 [corp\\accounts-group] 的数据库级权限是如何分配的。

```
1> CREATE DATABASE db1; 
2> GO
1> USE db1;
2> GO
Changed database context to 'db1'.
1> CREATE TABLE dbo.t1(a int);
2> GO
```

 为 Windows 组登录名 [corp\\accounts-group] 创建数据库用户 [corp\\sales-group]。要执行此步骤，请使用作为 sysadmin 成员的登录名通过 TDS 端点进行连接。

```
1> CREATE USER [corp\accounts-group] FOR LOGIN [corp\accounts-group];
2> GO
```

 现在，以 AD 用户 user1 的身份进行连接，来检查表 t1 的访问权限。由于我们尚未授予数据库级权限，因此这会导致权限被拒绝错误。

```
1> SELECT * FROM dbo.t1;
2> GO
Msg 33557097, Level 16, State 1, Server db-inst, Line 1
permission denied for table t1
```

向数据库用户 [corp\\accounts-group] 授予对表 t1 的 SELECT 权限。要执行此步骤，请使用作为 sysadmin 成员的登录名通过 TDS 端点进行连接。

```
1> GRANT SELECT ON dbo.t1 TO [corp\accounts-group];
2> GO
```

 以 AD 用户 user1 的身份进行连接，来验证访问权限。

```
1> SELECT * FROM dbo.t1;
2> GO
a
-----------

(0 rows affected)
```