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

时间:2012-02-20 21:34:38

标签: sql sql-server sql-server-2008 tsql database-project

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

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

我不知道它的作用,但它似乎将PUBLIC访问权限授予SA(只是通过它的读取方式)。

任何人都知道这是真的吗? (Clearly it grants some access via an "ENDPOINT"。但用简单的英语做什么呢?)

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

1 个答案:

答案 0 :(得分:4)

首先,GRANT是不正确的,原因很明显:它为被授权者使用名称[PUBLIC],但它应该是[public]。在区分大小写的安装上,名称将无法解析。

现在关于你的问题:AS [sa]部分与授予权限的行为相关,它不会转移给受让人。它读起来像:

  
    

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

  

具体而言,它暗示受让人([public]的成员)将被提升为[sa]。授予连接权限是连接到数据库的必要但不充分的特权。被授予者仍然需要访问数据库的权限(即,将用户映射到其在数据库中的登录)。此外,授予[public]服务器主体的连接权限不等于为BUILTIN\Everyone(或BUILTIN\ANONYMOUS LOGIN的安全主体(或其他{{3)创建登录。换句话说,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'