“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]”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章