暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 被遗忘的管理员权限

SQLServer 2023-05-09
604

SQL Server 文档中提到关于安全性的最佳实践如下:

请考虑从 sysadmin 角色中删除 DBA 帐户,并向 DBA 帐户授予 CONTROL SERVER,而不是使其成为 sysadmin 角色的成员。系统管理员角色不接受 DENY,而 CONTROL SERVER 接受。

SQL Server 2005 开始,Microsoft 引入了CONTROL SERVER 权限,官方建议使用 CONTROL SERVER 权限来替代固定服务器角色sysadmin。相信多数DBA分配管理员账号权限时,使用的是服务器角色sysadmin。但你知道 CONTROL SERVER 也拥有管理员权限吗?

我们先看看这两者的授权方式,右键指定的登录账号可对其进行授权,如下图。


或者使用 T-SQL 脚本授权,如下代码eeon]

    --授权服务器角色权限 sysadmin
    ALTER SERVER ROLE sysadmin ADD MEMBER jeeson
    GO
    --授权服务器权限 CONTROL SERVER
    GRANT CONTROL SERVER TO jeeson
    GO

    现在我们可以通过系统存储过程,看看服务器角色sysadmin的详细权限。

      EXEC sp_srvrolepermission @srvrolename = 'sysadmin'

      可以看到,sysadmin 有121项权限,可以说包含了实例的所有权限。

      CONTROL SERVER 与 sysadmin 两者之间有什么区别呢?

      CONTROL SERVER 与 sysadmin 拥有大多数相同的权限,其中部分差异如下表格。

      差异权限
      CONTROL SERVERsysadmin 
      实例级别deny权限Y
      N
      默认schemaN
      Y
      固定服务器角色添加成员NY
      DBCCN
      Y
      配置数据库邮件NY
      查看SQL Server 日志NY
      管理SQL Server 代理NY
      创建链接服务器NY

      通过以上表格对比发现,CONTROL SERVER 在涉及到实例以外的操作是被禁止的,当然使用 sp_configure 中的命令是可以的。

      在各云厂商中,客户是可以申请最高权限账号的,使用的是服务器角色 sysadmin 。相比安全而言,云厂商其实可以使用 CONTROL SERVER 权限的账号给客户作为其最佳实践。此外,很多企业对 SQL Server 账号进行审计的时候,只考虑 sysadmin 权限,很容易忽略 CONTROL SERVER 权限。我们可以使用以下脚本查账号是否拥有管理员权限。

        SELECT DISTINCT p.name AS [loginname] ,p.type_desc ,p.is_disabled,s.sysadmin
        ,case when sp.permission_name = 'CONTROL SERVER' then 1 else 0 end as contral_server
        ,p.create_date,p.modify_date
        FROM sys.server_principals p
        JOIN sys.syslogins s ON p.sid = s.sid
        JOIN sys.server_permissions sp ON p.principal_id = sp.grantee_principal_id
        WHERE p.type_desc IN ('SQL_LOGIN', 'WINDOWS_LOGIN', 'WINDOWS_GROUP')
        AND (s.sysadmin = 1 OR sp.permission_name = 'CONTROL SERVER')
        ORDER BY p.name
        GO

        最近文章推荐:

        历史文章推荐:



        文章转载自SQLServer,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论