第二章 SQLserver常見用戶授權配置


一、創建登錄用戶

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM