MSSQL 中模式的 GRANT CONTROL 有什么作用?

Mac*_*ver 4 security sql-server permissions access-control table

我使用 SQL Server 2016 进行这些测试。

以下不允许我在模式 S 中为用户 U 创建表

USE [D];
GRANT CONTROL ON SCHEMA :: [S] TO [U];
Run Code Online (Sandbox Code Playgroud)

但这确实:

USE [D]
GRANT ALTER ON SCHEMA :: [S] TO [U];
GRANT CREATE TABLE TO [U];
Run Code Online (Sandbox Code Playgroud)

如果您必须运行这两个附加命令以允许用户在特定模式中创建表,那么 GRANT CONTROL 应该做什么?

这个描述很好,但是我可以运行什么样的用例来确认(成功或失败)GRANT CONTROL 命令在运行该命令之前和之后在物理上影响用户在使用和不使用此模式的数据库上的安全性?

https://blogs.msdn.microsoft.com/lcris/2009/08/11/basic-sql-server-security-concepts-ownership-control-take-ownership/

CONTROL 权限:CONTROL 权限可用于轻松地将某个实体的所有权限授予某个主体。它是实体所有权之后的下一个最好的东西,但它不如所有权那么强大。主要区别在于 CONTROL 的被授予者仍然可以被拒绝对实体的一些其他权限。例如,我可以在一个表上被授予 CONTROL,同时我可以在那个表上被拒绝 SELECT,从而阻止我从中选择——这永远不会发生在所有者身上,因为所有者不能被授予或拒绝权限.

sep*_*pic 5

要查看CONTROL架构为您带来什么,请在没有任何权限的情况下创建一个测试用户,CONTROL向其授予架构并检查他拥有的权限:

create user test;
grant control on schema::dbo to test;

execute as user = 'test';
select *
from sys.fn_my_permissions('dbo', 'schema');
revert;
Run Code Online (Sandbox Code Playgroud)

这是你会得到的:

在此处输入图片说明

当您需要时,CREATE TABLE您应该打开 BOL 文章CREATE TABLE (Transact-SQL)并向下滚动到 PERMISSIONS:

在此处输入图片说明

现在您看到,即使您的表不应该包含 CLR 用户定义类型的列,您仍然需要CREATE TABLE授予您的用户权限以使他能够创建表。

测试用户已经ALTER SCHEMACONTROLon 模式暗示,但CREATE TABLE应该被授予(以及REFERENCE在 CLR 用户定义类型的情况下的权限)。