我正在查看由Visual Studio数据库项目生成的脚本,发现了这一点:
GRANT CONNECT
ON ENDPOINT::[TSQL Default TCP] TO PUBLIC
AS [sa];
我不知道它的作用,但是它似乎授予了PUBLIC作为SA的访问权限(只是通过它的读取方式)。
有人知道这真的是什么吗? (Clearly it grants some access via an "ENDPOINT"。但是用简单的英语来说,它是做什么的?)
通过阅读它,它告诉我,通过TCP端口连接的任何人都可以以[sa]身份运行。 (我希望这是不对的,但如果是这样,为什么Visual Studio的DB Project会这样做?)
最佳答案
首先,由于一个明显的原因,GRANT不正确:被授予者使用名称[PUBLIC]
,但应为[public]
。在区分大小写的安装中,名称将无法解析。
现在有关您的问题:AS [sa]
部分与授予许可的操作有关,它不会转移给被授予者。它的内容类似于:
具体来说,这并不意味着被授权者([public]
的成员)将被提升为[sa]
。授予连接权限是连接数据库的必要但不充分的特权。被授予者仍将需要访问数据库的权限(即,将用户映射到其在数据库中的登录名)。另外,授予[public]
服务器主体连接权限并不等同于为BUILTIN\Everyone
(或此问题的BUILTIN\ANONYMOUS LOGIN
...)安全主体(或其他built-in account)创建登录名。换句话说,没有登录名的NT用户(通过NT组成员身份显式或隐式)在SQL Server中仍将无法连接到实例。
附带说明一下,在任何全新安装上运行以下查询都表明[public]
已经授予了连接到默认T-SQL端点的权限:
select s.name as grantee,
e.name as endpoint,
p.permission_name as permission,
p.state_desc as state_desc
from sys.server_permissions p
join sys.server_principals s on s.principal_id = p.grantee_principal_id
join sys.endpoints e on p.major_id = e.endpoint_id
where p.type='CO'
关于sql - "Grant Connect on Endpoint as [sa]"是做什么的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9368741/