一、創建登錄用戶
1.登錄數據庫
#1.進入master庫
USE [master]
#2.創建用戶語法
CREATE LOGIN [登錄名] WITH
password={ 'password' | hashed_password hashed }
[must_change][,]
[sid=0x14585E90117152449347750164BA00A7][,]
[default_database=database_name][,]
[default_language=language][,]
[check_expiration={ on | off }][,]
[check_policy={ on | off }][,]
[credential=credential_name]
2.語法塊含義
#1.--login_name 指定創建的登錄名。
有四種類型的登錄:SQLServer登錄、Windows登錄、證書映射登錄和非對稱密鑰映射登錄。
--在創建從Windows域帳戶映射的登錄名時,必須以[<domainName>\<login_name>]格式使用Windows 2000之前的用戶登錄名。
--不能使用login_name@DomainName格式的UPN。
--身份驗證登錄的類型為sysname,它必須符合標識符規則,且不能包含“\”。
--Windows登錄名可以包含“\”。Active Directory用戶的登錄名需少於21個字符。
#2.--password 指定創建用戶的密碼
有兩種密碼類型:
--password='password*'
--僅適用於SQL Server登錄。指定正在創建的登錄名的密碼。應使用強密碼。
--有關詳細信息,請參閱強密碼和密碼策略。從SQL Server 2012 (11.x)開始,存儲的密碼信息使用 SHA-512 加鹽密碼進行計算。
--密碼是區分大小寫的。密碼應始終至少包含 8 個字符,並且不能超過128個字符。
--密碼可以包含 a-z、A-Z、0-9 和大多數非字母數字字符。 密碼不能包含單引號或 login_name。
--password=hashed_password
--僅適用於hashed關鍵字。指定要創建的登錄名的密碼的哈希值。
--hashed僅適用於SQL Server登錄。指定在password參數后輸入的密碼已經過哈希運算。
--如果未選擇此選項,則在將作為密碼輸入的字符串存儲到數據庫中之前,對其進行哈希運算。
--此選項應僅用於在服務器之間遷移數據庫。切勿使用hashed選項創建新的登錄名。hashed選項不能用於SQL 7或更早版本創建的哈希。
#3.--must_change 首次登錄設置新密碼
--僅適用於SQL Server登錄。如果包括此選項,則SQL Server將在首次使用新登錄時提示用戶輸入新密碼。
#4.--sid=sid 用於重新創建登錄名
--用於重新創建登錄名。僅適用於SQL Server身份驗證登錄,不適用於Windows身份驗證登錄。指定新SQL Server身份驗證登錄的sid。
--如果未使用此選項,SQL Server將自動分配sid。sid結構取決於SQL Server版本。 QL Server登錄sid:基於GUID的16 字節(binary(16))文本值。 例如,sid 0x14585E90117152449347750164BA00A7。
#5.--default_database=database 用於指定默認數據庫
--指定將指派給登錄名的默認數據庫。如果未包括此選項,則默認數據庫將設置為master。
#6.--default_language=language 用於指定登錄的語言
--指定將指派給登錄名的默認語言。如果未包括此選項,則默認語言將設置為服務器的當前默認語言。即使將來服務器的默認語言發生更改,登錄名的默認語言也仍保持不變。
#7.--check_expiration={ on | off } 用於指定是否強制實施密碼過期策略
--僅適用於SQL Server登錄。 指定是否應對此登錄帳戶強制實施密碼過期策略。 默認值為off。
#8.--check_policy={ on | off } 用於指定實施的密碼策略
--僅適用於SQL Server登錄。 指定應對此登錄強制實施運行SQL Server 計算機的 Windows 密碼策略。 默認值為on。
--如果 Windows 策略要求強密碼,密碼必須至少包含以下四個特點中的三個:
--大寫字符 (A-Z)。
--小寫字符 (a-z)。
--數字 (0-9)。
--一個非字母數字字符,如空格、、@、*、^、%、!、$、# 或 &。
#9.--credential=credential_name 用於映射登錄憑據
--將映射到新SQL Server登錄的憑據名稱。 該憑據必須已存在於服務器中。當前此選項只將憑據鏈接到登錄名。憑據不能映射到系統管理員(sa)登錄名。
3.常用示例
#1.最快速創建方式:
USE [master]
CREATE LOGIN [登錄名] WITH PASSWORD=N'密碼', DEFAULT_DATABASE=[test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
#2.普通創建方式:
--聲明引用數據庫
use tests;
--創建登錄用戶
create login '登錄名'
with
password='123456',
--must_change,
--sid=0x14585E90117152449347750164BA00A7,
default_database=master,
--default_language=language,
check_expiration=off,
check_policy=off
--credential=[sysadmin]
二、賬戶服務器角色授權
1.常用服務器角色類型
@rolename枚舉值(角色權限):
#1.bulkadmin --可以運行BULK INSERT語句
#2.dbcreator --可以創建、修改數據庫
#3.diskadmin --用戶管理磁盤文件
#4.processadmin --可以終止SQL SERVER實例中的進程
#5.public --默認且不可修改
#6.securityadmin --管理和審核登錄賬戶
#7.serveradmin --可以更改服務器范圍的配置選項和關閉服務器
#8.setupadmin --配置復制和鏈接服務器
#9.sysadmin --執行任何活動
2.單獨授權服務器角色
#1.聲明引用數據庫
USE [master]
#2.創建登錄名並授權服務器角色
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'bulkadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'dbcreator'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'diskadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'processadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'securityadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'serveradmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'setupadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
3.刪除服務器角色
#1.聲明引用數據庫
USE [master]
#2.刪除賬戶角色
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'bulkadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'dbcreator'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'diskadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'processadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'securityadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'serveradmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'setupadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
4.單用戶添加多個服務器角色
#1.聲明引用數據庫
USE [master]
#2.添加多個服務器角色,服務器角色用於向用戶授權服務器范圍內的安全特權
alter server role [bulkadmin] add member '登錄名';
alter server role [dbcreator] add member '登錄名';
alter server role [diskadmin] add member '登錄名';
alter server role [processadmin] add member '登錄名';
alter server role [securityadmin] add member '登錄名';
alter server role [serveradmin] add member '登錄名';
alter server role [setupadmin] add member '登錄名';
alter server role [sysadmin] add member '登錄名';
三、數據庫授權
1.授權所有庫
#1.聲明引用數據庫
USE [master]
#2.授權所有庫
EXEC master..sp_addsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
2.訪問特定數據庫
#1.聲明引用數據庫
USE [master]
#2.刪除用戶擁有的sysadmin角色
EXEC master..sp_dropsrvrolemember @loginame = N'登錄名', @rolename = N'sysadmin'
#3.為登錄用戶創建數據庫用戶映射
USE databasename
create user [登錄名] for login [登錄名] with default_schema=dbo
ps:此時還不可訪問該數據庫的對象如表、存儲過程、視圖等
#4.示例;
為登陸賬戶創建數據庫用戶(create user),在mydb數據庫中的security中的user下可以找到新創建的dba
create user dba for login dba with default_schema=dbo
並指定數據庫用戶“dba” 的默認 schema 是“dbo”。這意味着 用戶“dba” 在執行“select * from t”,實際上執行的是 “select * from dbo.t”。
3.訪問該數據庫的所有對象
#1.聲明引用數據庫
USE databasename
#2.設置登錄用戶訪問該數據庫的所有對象
exec sp_addrolemember 'db_owner', '登錄名'
4.禁用該數據庫的所有對象
#1.聲明引用數據庫
USE databasename
#2.禁用登錄用戶訪問該數據庫的所有對象
exec sp_droprolemember 'db_owner', '登錄名'
四、數據表、視圖等授權
1.數據表、視圖等授權分類
授權登錄用戶訪問指定的表\存儲過程\視圖等(先禁用數據庫用戶擁有的db_owner角色,然后再對制定的對象賦相應的權限)
對象(表|存儲過程|視圖等)枚舉值:
#1.ALTER --修改
#2.CONTROL --控制
#3.EXECUTE --執行
#4.TAKE OWNERSHIP --所有權限
#5.VIEW DEFINITION --查看定義
2.禁用該數據庫的所有對象
#1.聲明引用數據庫
USE databasename
#2.禁用登錄用戶訪問該數據庫的所有對象
exec sp_droprolemember 'db_owner', '登錄名'
3.授權登錄用戶訪問指定的表\存儲過程\視圖等
#1.聲明引用數據庫
USE databasename
#授權登錄用戶訪問指定的表、存儲過程、視圖等的授權
GRANT ALTER ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
GRANT CONTROL ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
GRANT EXECUTE ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
GRANT TAKE OWNERSHIP ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
GRANT VIEW DEFINITION ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
4.刪除對登錄用戶訪問指定的表\存儲過程\視圖等的授權
#1. 聲明引用數據庫
use databasename
#2.刪除對登錄用戶訪問指定的表\存儲過程\視圖等的授權
REVOKE ALTER ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
REVOKE CONTROL ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
REVOKE EXECUTE ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
REVOKE TAKE OWNERSHIP ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
REVOKE VIEW DEFINITION ON [dbo].[表|存儲過程|視圖等名稱] TO [登錄名]
5.授權登錄用戶訪問表的指定列
#1. 聲明引用數據庫use databasename#2.授權登錄用戶訪問表的指定列GRANT SELECT ON dbo.表名(字段1,字段2...) TO [登錄名]
6.批量刪除數據庫所有表
#1. 聲明引用數據庫
use databasename
#2.批量刪除數據庫所有表
DECLARE @DROP_STRING VARCHAR(8000)
7.刪除所有表的外鍵約束
#1.刪除所有表的外鍵約束
DECLARE DROP_FK CURSOR FOR
SELECT 'ALTER TABLE '+ OBJECT_NAME(PARENT_OBJ) + ' DROP CONSTRAINT '+NAME
FROM SYSOBJECTS
WHERE XTYPE = 'F'
OPEN DROP_FK
FETCH NEXT FROM DROP_FK INTO @DROP_STRING
WHILE(@@FETCH_STATUS=0)
BEGIN EXEC(@DROP_STRING) FETCH NEXT FROM DROP_FK INTO @DROP_STRING
END
CLOSE DROP_FK
DEALLOCATE DROP_FK
8.刪除表
DECLARE DROP_TABLE CURSOR FOR
SELECT 'DROP TABLE '+NAME
FROM SYSOBJECTS
WHERE XTYPE = 'U'
OPEN DROP_TABLE
FETCH NEXT FROM DROP_TABLE INTO @DROP_STRING
WHILE(@@FETCH_STATUS=0)
BEGIN EXEC(@DROP_STRING) FETCH NEXT FROM DROP_TABLE INTO @DROP_STRING
END
CLOSE DROP_TABLE
DEALLOCATE DROP_TABLE
GO