sqlServer创建用户及分配权限

--****************架构*主体*************--
select * from sys.database_principals --数据库主体 【创建数据库用户的信息会写入该主体中】
select * from sys.schemas --数据库架构 【创建角色权限的信息会写入该主体中】
select * from sys.server_principals --服务器主体 【创建登录用户的信息会写入该主体中】
--****************架构*主体*************--

--注:【【【命令中用[ ]内的部分是我们要输入的内容】】】

--(1)创建登录用户【该句执行,数据会保存在服务器主体sys.server_principals中】 --LoginUserName 登录用户名
CREATE login [LoginUserName] WITH password = '[123456]', default_database= ReportServer

--(2)指定默认数据库【为了保持创建数据库用户与创建登录用户默认数据库一致,当前sql所在数据库可能不是创建登录用户的默认数据库。若一致,则可以不用执行】
USE ReportServer

--(3)创建数据库用户并与登录用户建立连接【该句执行,数据会保存在数据库主体sys.database_principals中】 -- DatabaseUserName 数据库用户名
CREATE USER [DatabaseUserName] FOR login [LoginUserName] WITH default_schema = dbo --[DatabaseUserName]和[LoginUserName]名最好保持一致,方便确定以后登录和查看对应关系。

--(4-1)给新用户赋予权限
USE ReportServer
EXEC sp_addrolemember 'db_datareader', '[DatabaseUserName]'

--*******************固定数据库角色*******************--
'db_owner' --拥有数据库全部权限,包括删除数据库权限
'db_accessadmin' --只给数据库用户创建其他数据库用户的权限,而没有创建登录用户的权限。
'db_securityadmin' --可以管理全部权限、对象所有权、角色和角色成员资格
'db_ddladmin' --可以发出所有DDL(Create,Alter和Drop),但不能发出GRANT、REVOKE或DENY语句
'db_backupoperator' --允许对数据库进行备份和还原的权限【备份与还原是通过sql sever management studio也可以进行】
'db_datareader' --可以选择数据库内任何用户表中的所有数据
'db_datawriter' --可以更改数据库内任何用户表中的所有数据
'db_denydatareader' --不能查询数据库内任何用户表中的任何数据
'db_denydatawriter' --不能更改数据库内任何用户表中的任何数据
--更多释义请访问:https://www.cnblogs.com/tiancai/p/4877969.html
--*******************固定数据库角色*******************--

--(4-2)给表授权限,仅仅可以访问具体的表--------------------TableName 表名
/*
GRANT, REVOKE, DENY之间的形象解释
GRANT 给你一个苹果
REVOKE 我要拿回给你的苹果
DENY 不给你苹果
*/
--授予用户查询,插入,更新,删除表权限,以及回收和禁止用户访问权限
GRANT SELECT,INSERT,UPDATE,DELETE ON [TableName] to [DatabaseUserName]
REVOKE SELECT,INSERT,UPDATE,DELETE ON [TableName] to [DatabaseUserName]

GRANT SELECT ON [TableName] TO [DatabaseUserName]
REVOKE SELECT ON [TableName] TO [DatabaseUserName]

GRANT INSERT ON [TableName] TO [DatabaseUserName]
REVOKE INSERT ON [TableName] TO [DatabaseUserName]

GRANT UPDATE ON [TableName] TO [DatabaseUserName]
REVOKE UPDATE ON [TableName] TO [DatabaseUserName]

GRANT DELETE ON [TableName] TO [DatabaseUserName]
REVOKE DELETE ON [TableName] TO [DatabaseUserName]
DENY DELETE ON [TableName] TO [DatabaseUserName]
--------------------------------------------------------------------


--(5)使该用户访问其他数据库权限--
use [AnotherDatabase]
CREATE USER [DatabaseUserName] FOR login [LoginUserName] WITH default_schema=dbo --可以访问该数据库了,就是在新的数据库下的安全账户中再建一个相同的用户,通过sql sever management studio看容易理解。
EXEC sp_addrolemember 'db_datareader', '[DatabaseUserName]' --给访问的数据库分配权限

--(6)创建角色权限
--********************创建角色权限***********************--
EXEC sp_addrole '[db_selectUpdate]' --创建一个类似于db_datareader的角色,数据库会存在数据库架构sys.schemas中
GRANT SELECT, UPDATE TO [db_selectUpdate] --给该角色赋予查询和修改的权限
EXEC sp_addrolemember '[db_selectUpdate]', '[DatabaseUserName]' --给新建的数据库用户分配刚才赋予的权限【之后想只给查看和修改权限的就用新建的就可以了】
--********************创建角色权限***********************--


--(7)其他操作命令-------------
--禁用登陆帐户:
ALTER login [LoginUserName] DISABLE

--启用登陆帐户:
ALTER login [LoginUserName] ENABLE

--登陆帐户改名:(数据库用户名没有修改,但其对应关系还在,数据库对应安全性下用户名文件夹中的用户名并没有改,要改此名,见【数据库用户改名】)
ALTER login [LoginUserName] WITH name = [NewLoginUserName]

--登陆帐户改密码:
ALTER login [LoginUserName] WITH password='[654321]'

--数据库用户改名:
ALTER USER [DatabaseUserName] WITH name = [NewDatabaseUserName]

--删除用户访问具体数据库权限(先指定要删除的数据库名):DatabaseName 数据库名
USE [DatabaseName]
DROP USER [DatabaseUserName]

--删除 SQL Server登陆帐户(两种方法)【执行后服务器主体sys.server_principals会删除相应登录用户】:
DROP login [LoginUserName]
EXEC sp_revokedbaccess '[LoginUserName]'
CREATE USER [DatabaseUserName] FOR login [LoginUserName] WITH default_schema = dbo

--(8)备份与还原数据库
--********************备份与还原数据库***********************--
1 /* 备份 */
BACKUP DATABASE [DatabaseName] TO DISK = '[D:\haha.bak]'

2 /* 删除该数据库 */
drop database [DatabaseName]

3 /* 还原 */
restore DATABASE [DatabaseName] FROM DISK = '[D:\haha.bak]'

4 /* 把备份数据库的权限赋予给用户Test5【此时他只能备份数据库,还原没有权限,子用户想还原找sa用户还原】*/
GRANT BACKUP DATABASE TO [DatabaseUserName]

5 /*给子用户授予数据库备份和还原的权限 目前在子用户上实现不了还原功能*/
EXEC sp_addrolemember 'db_backupoperator', '[DatabaseUserName]'
--********************备份与还原数据库***********************--

猜你喜欢

转载自www.cnblogs.com/Jishiyu/p/11824278.html