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会这样做?)
首先,由于一个明显的原因,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)
| 归档时间: |
|
| 查看次数: |
4059 次 |
| 最近记录: |