--****************架構*主體*************--
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]'
--********************備份與還原數據庫***********************--