vlambda博客
学习文章列表

SQL数据库权限管理

首先要理清“登录名”和“用户名”的关系。

登录名是只能登录到服务器,不能访问数据库的;

而用户名是可以用来访问数据库的账户


创建登录名,登录名只能登录服务器不可访问数据库


登录名的增删改

create login test2 /*创建test2用户*/with password='654321' /*设置密码*/
sp_addlogin 'test3','123456','cjgl' /*创建登录名,密码,默认数据库*//*sp_addlogin 登录名,登录密码,默认数据库,默认语言,安全码,是否加密*/sp_password 旧密码,新密码,登录名 /*修改登录名的密码*/
sp_droplogin test3 /*删除登录名test3*/alter login test3 with name=lisi /*修改登录名test3为lisi*/alter login test3 with password='123' /*修改登录名test3的密码为123*/
alter login lisi disable /*禁用lisi登录名*/alter login lisi enable /*启用lisi登录名*/


创建用户名,用户名可以访问数据库


用户名的增

sp_grantdbaccess test1,test2 /*登录名,数据库用户名*/


用户名的查

sp_helpuser /*查看所有数据库的用户*/


用户名的删

sp_revokedbaccess text1 /*删除用户名text1*/


用户名的改

create user test2 for login test1/*创建用户名test2 映射到登录名test1*/sp_adduser 'test1','test2'/*创建登录名test1映射到用户名test2*/alter user text2 with name=wangwu /*将用户名text2改为wangwu*/drop user wangwu /*将用户名wangwu删除*/

在操作数据库权限管理之前,必须成立一个登录名和用户名的映射关系,也就是说,没有登录名就无法访问服务器,没有用户名就无法访问数据库,映射关系就是将登录名与用户名进行绑定,从而达到一个非管理员账户可登录并管理数据库的目的。


数据库管理权限权限分为

对象权限:对访问和操作表,视图,存储过程等对象的权限

语句权限(DDL):用户创建数据库修改对象执行数据库或日志备份权限

暗示性权限:隐藏的权限


预定的数据库角色:

数据库角色 描述

db_accessadmin

管理对数据库的访问
db_backupoperator
备份数据库
db_datareader
对数据库中的任何表执行select操作,读取所有信息
db_datawriter
对数据库中的任何表执行insert、delete、update操作
db_ddladmin
新建、删除和修改数据库中的任何对象
db_denydatareder
不对数据库中的任何表执行select操作,读取所有信息
db_denydatawriter 不对数据库中的任何表执行insert、delete、update操作
db_owner
数据库的所有者,可以执行任何数据库管理工作,可以对数据库内的任何对象进行任何操作
db_securityadmin
修改数据库角色成员并管理权限
public
特殊角色,包含所有数据库用户账号和角色拥有的访问权限,这种权限的继承关系不能改变。在初始状态下,public没有任何权限,但是可以为该角色授权

预定的角色权限不可修改,不可删除。自定义角色可使用户实现对数据的某一特定功能。


不创建角色实现添加权限

/*登录账号:test1登录服务器后,使用test3用户能够查询cjgl数据库里的studend表,并且可以插入新的数据。*/

grant <权限> on student to <数据库用户>
grant select on student to test3/*向用户test3中添加可查询表的权限*/grant insert on student to test3 /*向用户test3中添加可向表里添加数据的权限*/grant delete on student to test3 /*向用户test3中添加删除权限*/grant create table to test3 /*向test3中添加创建表的权限*/
grant select,insert on student to test3/*也可以同时添加多个权限用逗号隔开*/revoke delete on student from test3 /*从test3中回收撤销删除的权限*/revoke delete,select on student from test3 /*也可以同时撤销多个权限用逗号隔开*/


/*用户test3只能对sc表的成绩列进行修改*/

grant update(grade)on sc to test3grant select on sc to test3


/*将test3在sc表的权限转移到其他用户上*/

grant select on sc to test3 with grant option


/*在test3用户下转移权限给test2*/

grant select on sc to test2


创建角色实现添加权限

/*创建角色*/sp_addrole yyds /*使用sp_addrole语句创建角色yyds*/create role yyds /*create role语句创建角色yyds*/
/*删除角色*/sp_droprole yyds  /*使用sp_droprole删除角色yyds*/drop role yyds  /*使用drop role 删除角色yyds*/

数据库中不允许删除含有成员的角色,在删除角色之前要先删除角色的成员

sp_addrolemember 角色,用户名 /*添加用户名进角色*/sp_droprolemember 角色,用户名 /*删除角色中里的用户*/


添加数据库角色成员

sp_addrolemember 数据库角色名,数据库用户名   例如要让用户test3对表拥有删除权限 sp_addrolemember db_ddladmin,test3


删除数据库角色成员

sp_droprolemember 数据库角色名,数据库用户名   例如要让用户test3对表拥没有删除权限sp_droprolemember db_ddladmin,test3