"将端点上的连接作为[sa]"做什么?

Vac*_*ano 5 sql t-sql sql-server database-project sql-server-2008

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

GRANT CONNECT
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC
    AS [sa];
Run Code Online (Sandbox Code Playgroud)

我不知道它做了什么,但它似乎将PUBLIC访问权限授予SA(仅通过它的读取方式).

有人知道这到底是做什么的吗?(显然它通过"ENDPOINT"授予一些访问权限.但是用简单的英语做什么呢?)

通过阅读它,它告诉我任何通过TCP端口连接的人都可以作为[sa]运行.(我希望这不对,但如果是的话,为什么Visual Studio的DB Project会这样做?)

Rem*_*anu 4

首先,由于一个明显的原因,GRANT 是不正确的:它使用[PUBLIC]受让人的名称,但它应该是[public]。在区分大小写的安装中,该名称将无法解析。

现在关于您的问题:该AS [sa]部分与授予许可的操作相关,它不会转移给受让人。它读起来像:

我以 的名义[sa],将连接端点的权限授予[TSQL Default TCP][public]组的成员。

具体来说,它并不意味着受赠者( 的成员[public])将被提升为[sa]。授予连接权限是连接数据库所必需的但还不够的权限。受让人仍然需要访问数据库的权限(即,将用户映射到其在数据库中的登录名)。另外,向[public]服务器主体授予连接权限并不等于为BUILTIN\Everyone(或BUILTIN\ANONYMOUS LOGIN就此而言...)安全主体(或其他内置帐户)创建登录名...换句话说,没有登录名的 NT 用户SQL Server 中的(通过 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'
Run Code Online (Sandbox Code Playgroud)