当前位置:首页 > 问答 > 正文

带你简单聊聊SQL Server里那些权限设置和管理到底咋回事

行,那咱们就拉个家常,用大白话聊聊 SQL Server 这个“大仓库”的权限管理是咋回事,你可以把这个数据库想象成一个存放着公司全部家当的大仓库,里面有的是贵重物品(数据),权限管理呢,说白了就是一套规则,规定谁能进这个仓库,进去了能碰哪些货架,是只能看两眼,还是能搬走,甚至是能重新规划货架。

第一道门禁:谁能进仓库?(服务器级权限)

你得先能连上这个“仓库大楼”才行,这个层面的管理,在 SQL Server 里叫“服务器级权限”,这就好比公司大门,不是谁都能刷开那个门禁的。

  • 怎么进门?——登录名 (Login):你要进门,得先有个门禁卡,这个在 SQL Server 里就叫“登录名”,这个登录名可以对应着 Windows 系统的账户(比如你公司的域账号),也可以是 SQL Server 自己创建的用户名和密码,数据库管理员(DBA)负责发卡(创建登录名)和设置初始权限。
  • 进门后能干啥?——服务器角色 (Server Role):光进门还不行,进门后的大厅里也有不同区域,SQL Server 预设了一些“身份组”,sysadmin(系统管理员),拥有这个身份的人就相当于仓库的总负责人,能在服务器里为所欲为,而像 public 这个最基本的身份,每个登录名都有,但默认权限很小,几乎啥也干不了,DBA 会根据你的工作需要,把你分配到不同的“身份组”里,决定你是否有权限重启数据库服务、创建新的数据库等等。

(参考来源:Microsoft Learn - 服务器级别的角色)

带你简单聊聊SQL Server里那些权限设置和管理到底咋回事

进了仓库,能去哪个库?(数据库级权限)

刷开门禁,进了大楼,但你还不一定能进到具体的某个仓库里,这栋大楼里可能有很多个独立的仓库(不同的数据库),财务数据库”、“人事数据库”、“销售数据库”。

  • 进具体仓库的凭证——数据库用户 (User):你在服务器层面有张门禁卡(登录名),但想进入“财务数据库”这个具体的仓库,还需要在这个仓库里有一个对应的“出入证”,这个就是“数据库用户”,DBA 会把你的登录名映射到某个数据库的用户上,也就是说,一个登录名可以对应多个数据库里的不同用户。
  • 在仓库里的基本身份——数据库角色 (Database Role):和服务器角色类似,在每个数据库内部,也预设了一些身份组,最常用的就是 db_owner(数据库所有者),拥有这个数据库里的全部权限,可以理解为这个分仓库的库管,其次是 db_datareader,可以看所有货架上的东西但不能动;db_datawriter 则可以往货架上放东西、挪东西,但不能乱改货架结构,DBA 会把你在这个数据库里的用户,分配到合适的角色中。

(参考来源:Microsoft Learn - 数据库级别的角色)

带你简单聊聊SQL Server里那些权限设置和管理到底咋回事

细到每个货架和商品:能看还是能拿?(对象级权限)

这是最精细的权限控制,假设你现在有权限进入了“销售数据库”仓库,并且身份是 db_datareader,可以看所有货架(表),但可能公司规定,你只能看“客户信息表”和“产品表”,但不能看“员工工资表”。

  • 权限的精细控制:这时候,DBA 就可以进行更细致的设置,他可以针对具体的“货架”(数据表)、甚至是表中的某些“商品种类”(列)来授权,常用的权限动词很简单:
    • SELECT(查):允许你看这个表里的数据。
    • INSERT(增):允许你往这个表里添加新数据。
    • UPDATE(改):允许你修改表里已有的数据。
    • DELETE(删):允许你删除表里的数据。
    • REFERENCES(参照):这个稍微绕点,大概意思是允许你创建外键关系,相当于允许你声明你这个货架上的东西和另一个货架有关联。
    • EXECUTE(执行):针对存储过程的,允许你运行某个“自动化流程”。
  • 授权语句(GRANT)和收权语句(REVOKE):DBA 通过 GRANT SELECT ON 员工表 TO 张三 这样的命令,把看“员工表”的权限给张三,反过来,如果张三调岗了,就用 REVOKE SELECT ON 员工表 FROM 张三 把权限收回。

(参考来源:Microsoft Learn - GRANT 对象权限)

带你简单聊聊SQL Server里那些权限设置和管理到底咋回事

权限的继承:角色和组的好处

如果一个部门有10个人都需要同样的权限,DBA 没必要给每个人重复设置10遍,他可以创建一个新的“数据库角色”,比如叫“销售部查询员”,然后把这个角色赋予 SELECT 几个特定表的权限,他只需要把这10个用户都添加到“销售部查询员”这个角色里就行了,这样管理起来非常方便,改权限也只需要改角色一次,所有成员自动生效,这就像给整个部门发一种特定区域的通行证,而不是给每个人单独定制。

总结一下

SQL Server 的权限管理就像一套层层递进的安保系统:

  1. 服务器层:管你能不能进大楼(创建登录名,分配服务器角色)。
  2. 数据库层:管你能进哪个分仓库(映射数据库用户,分配数据库角色)。
  3. 对象层:管你在仓库里能碰哪些货架和商品(对具体表、视图等授予增删改查权限)。

这么设计的好处是既安全又灵活,既能防止外人闯入,也能防止内部人员越权操作,保证公司最重要的数据资产安安全全的,管理员的工作就是当好这个“大管家”,根据每个人的职责,精准地配置好每一扇门的钥匙。