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 test3
grant 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