"Grant Connect on Endpoint as [sa]" 是什么意思?

5

我正在查看由Visual Studio数据库项目生成的脚本,发现了这个:

GRANT CONNECT
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC
    AS [sa];

我不知道它具体做什么,但是从读取方式来看,似乎授予了公共访问权限作为SA。

有人知道它的真正作用吗?( 显然它通过“终端”授予了一些访问权限。但是用简单的英语来说,它到底是做什么的?)

仅仅通过阅读,对我来说,任何连接TCP端口的人都可以运行为[sa]。(我希望这不是正确的,但如果是,为什么Visual Studio的DB项目会这样做呢?)

1个回答

4
首先,GRANT存在一个明显的错误:它使用了名为[PUBLIC]的受让人名称,但应该是[public]。在区分大小写的安装中,名称将无法解析。
现在谈谈你的问题:AS [sa]部分与授予权限的行为相关,而不是转移到受让人。它的意思是:
我以[sa]的名义,向[public]组的成员授予连接到[TSQL Default TCP]端点的特权。
具体来说,它并不意味着受让人([public]的成员)将被提升为[sa]。授予连接权限是连接到数据库所需的必要但不充分的权限。受让人仍需要获得访问数据库的权限(即在数据库中映射用户登录)。此外,将连接权限授予[public]服务器主体并不等同于为BUILTIN\Everyone(或其他内置帐户)创建登录...换句话说,在SQL Server中没有登录(通过NT组成员身份隐式或显式地进行)的NT用户仍将无法连接到实例。
顺便说一句,在任何全新安装上运行以下查询将显示连接到默认T-SQL端点的权限已授予[public]
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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接