我正在查看由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/

10-13 00:56