在SQLServer中实现自主存取控制的授权部分
1. 说在前面
实现授权(authorization),只需要通过GRANT
和REVOKE
语句给某一数据库下的由用户名(username)表示的用户授权即可。但是我发现在SQL server中存在着登录名(login),用户名等概念,通过GRANT
和REVOKE
语句授权需要用户名,而用户名又需要登录名,因此对这两个概念的准确把握是很重要的。
2. 登录名和用户名的区别
在SQL server中,登录名(login)是用在访问DBMS时起到一个验证身份的作用(authentication),它只是能登录进DBMS,但是默认状态下对DBMS中的数据库是没有任何权限的。同时,对登录名赋予的权限是DBMS级别的,也就是说这个登录名如果可以访问数据库,那么对登录名赋予的权限将影响到这个登录名下属的每一个数据库。
有了登录名,还要有权限才能访问数据库。而赋权是以数据库为单位进行的,数据库通过新增用户名的方式,将该新增的用户名与上文的登录名绑定,实现登录名到用户名的映射(一个不严谨的说法,相当于这个数据库给某个登录名一个“许可证”,从此,这个登录名在这个数据库这算是有头有脸的人了)。一个登录名能有多大权力要看有多少数据库愿意给他“许可证”了,一个登录名手上的许可证越多,那么他能访问的数据库也越多。不过,有了许可证也不是啥都能干,数据库会对每个用户名分配相应的权限,具体给什么样的权限取决于数据库的创建者或者DBA。通过前面的分析,我们知道用户名是数据库层面的,赋予的权限也是仅仅对单个数据库而言。
一个登录名可以对应多个用户名(相当于在不同的数据库那拿许可证嘛),但是在一个数据库中只能有一个用户名。
3.具体怎么做
前面说了一大堆概念,下面说具体怎么做,以下都是通过SQL代码实现的
3.1. 新建登录名
1 |
|
将上面的loginname
,pass
换成自己想设置的登录名,密码即可。
3.2. 新建用户名
1 |
|
将上面的loginname
,username
换成自己想设置的登录名,用户名即可。登录名和用户名可以相同,可以不同,取决于个人。
3.3. 通过GRANT和REVOKE授权和收回
3.3.1. GRANT语法
1 |
|
3.3.2. REVOKE语法
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!