在 SQLServer 中实现自主存取控制的授权部分
本文最后更新于 693 天前,如遇到任何问题欢迎在评论区留言呀!

说在前面

实现授权 (authorization),只需要通过GRANTREVOKE语句给某一数据库下的由用户名 (username) 表示的用户授权即可。但是我发现在 SQL server 中存在着登录名 (login),用户名等概念,通过GRANTREVOKE语句授权需要用户名,而用户名又需要登录名,因此对这两个概念的准确把握是很重要的。

登录名和用户名的区别

在 SQL server 中,登录名 (login) 是用在访问 DBMS 时起到一个验证身份的作用 (authentication),它只是能登录进 DBMS,但是默认状态下对 DBMS 中的数据库是没有任何权限的。同时,对登录名赋予的权限是 DBMS 级别的,也就是说这个登录名如果可以访问数据库,那么对登录名赋予的权限将影响到这个登录名下属的每一个数据库。

有了登录名,还要有权限才能访问数据库。而赋权是以数据库为单位进行的,数据库通过新增用户名的方式,将该新增的用户名与上文的登录名绑定,实现登录名到用户名的映射(一个不严谨的说法,相当于这个数据库给某个登录名一个“许可证”,从此,这个登录名在这个数据库这算是有头有脸的人了)。一个登录名能有多大权力要看有多少数据库愿意给他“许可证”了,一个登录名手上的许可证越多,那么他能访问的数据库也越多。不过,有了许可证也不是啥都能干,数据库会对每个用户名分配相应的权限,具体给什么样的权限取决于数据库的创建者或者 DBA。通过前面的分析,我们知道用户名是数据库层面的,赋予的权限也是仅仅对单个数据库而言。

一个登录名可以对应多个用户名(相当于在不同的数据库那拿许可证嘛),但是在一个数据库中只能有一个用户名。

具体怎么做

前面说了一大堆概念,下面说具体怎么做,以下都是通过 SQL 代码实现的

新建登录名

CREATE LOGIN loginname   
   WITH PASSWORD = 'pass'

将上面的loginnamepass换成自己想设置的登录名,密码即可。

新建用户名

CREATE USER username FOR LOGIN loginname;

将上面的loginnameusername换成自己想设置的登录名,用户名即可。登录名和用户名可以相同,可以不同,取决于个人。

通过 GRANT 和 REVOKE 授权和收回

GRANT 语法

GRANT <权限>[,<权限>]···
ON <对象名>
TO <用户>[,<用户>]···
[WITH GRANT OPTION]

REVOKE 语法

REVOKE <权限>[,<权限>]···
ON <对象名>
FROM <用户>[,<用户>]···
[CASCADE|RESTRICT]
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇