【问题标题】: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 项目为什么要这样做?)

【问题讨论】:

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


    【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2019-11-26
      • 2019-09-10
      • 1970-01-01
      • 2011-04-22
      • 2023-04-08
      • 2020-12-24
      相关资源
      最近更新 更多