“Grant Connect on Endpoint as [sa]”有啥作用?
Posted
技术标签:
【中文标题】“Grant Connect on Endpoint as [sa]”有啥作用?【英文标题】:What does "Grant Connect on Endpoint as [sa]" do?“Grant Connect on Endpoint as [sa]”有什么作用? 【发布时间】:2012-02-20 21:34:38 【问题描述】:我正在浏览我的 Visual Studio 数据库项目生成的脚本,我发现了这个:
GRANT CONNECT
ON ENDPOINT::[TSQL Default TCP] TO PUBLIC
AS [sa];
我不知道它是做什么的,但它似乎以 SA 的身份授予 PUBLIC 访问权限(仅通过它的读取方式)。
有人知道这到底是做什么的吗? (Clearly it grants some access via an "ENDPOINT"。但是用简单的英语来说它是做什么的?)
通过阅读它,它告诉我任何通过 TCP 端口连接的人都可以作为 [sa] 运行。 (我希望这是不对的,但如果是这样,Visual Studio 的 DB 项目为什么要这样做?)
【问题讨论】:
【参考方案1】:首先,GRANT 不正确有一个明显的原因:它使用名称 [PUBLIC]
作为受赠者,但它应该是 [public]
。在区分大小写的安装中,名称将无法解析。
现在关于您的问题:AS [sa]
部分与授予权限的操作相关,它不会转移给受让人。它的内容如下:
我以
[sa]
的名义,将连接[TSQL Default TCP]
端点的权限授予[public]
组的成员。
具体来说,它确实不暗示受让人([public]
的成员)将被提升为[sa]
。授予连接权限是连接数据库的必要但不充分的特权。被授权者仍然需要访问数据库的权限(即,将用户映射到其在数据库中的登录名)。此外,授予[public]
服务器主体的连接权限并不等同于为BUILTIN\Everyone
(或BUILTIN\ANONYMOUS LOGIN
就此事...)安全主体(或其他built-in account)创建登录...在其他在 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'
【讨论】:
以上是关于“Grant Connect on Endpoint as [sa]”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章