一.SQL Server的安全機(jī)制
SQL Server的整個(gè)安全體系結(jié)構(gòu)從順序上可以分為認(rèn)證和授權(quán)兩個(gè)部分杖狼,其安全機(jī)制可以分為5個(gè)層級(jí)蝶涩。
(1)客戶機(jī)安全機(jī)制
(2)網(wǎng)絡(luò)傳輸?shù)陌踩珯C(jī)制
(3)實(shí)例級(jí)別安全機(jī)制
(4)數(shù)據(jù)庫(kù)級(jí)別安全機(jī)制
(5)對(duì)象級(jí)別安全機(jī)制
這些層級(jí)由高到低,所有的層級(jí)之間相互聯(lián)系嗽上,用戶只有用過了高一層的安全驗(yàn)證熄攘,才能繼續(xù)訪問數(shù)據(jù)庫(kù)中低一層級(jí)的內(nèi)容。
二.與數(shù)據(jù)庫(kù)安全相關(guān)的對(duì)象
在SQL Server中浅萧,與數(shù)據(jù)庫(kù)安全相關(guān)的對(duì)象主要有用戶哲思、角色、權(quán)限等帝簇,只有了解了這些對(duì)象的作用,才能靈活地設(shè)置和使用這些對(duì)象残揉,從而提高數(shù)據(jù)庫(kù)的安全性闪湾。
(1)數(shù)據(jù)庫(kù)用戶
能夠使用數(shù)據(jù)庫(kù)的用戶,可以為不同數(shù)據(jù)庫(kù)設(shè)置不同的用戶,從而提高數(shù)據(jù)庫(kù)訪問的安全性何暇。
(2)用戶權(quán)限
通過給用戶權(quán)限凛驮,每個(gè)數(shù)據(jù)庫(kù)用戶對(duì)回有不同的訪問權(quán)限,如:用戶只能查詢不能更新數(shù)據(jù)宏胯。用戶權(quán)限主要分為系統(tǒng)權(quán)限和對(duì)象權(quán)限兩種本姥。系統(tǒng)權(quán)限是指在某個(gè)數(shù)據(jù)庫(kù)上執(zhí)行某些操作的權(quán)限婚惫,或針對(duì)某一類對(duì)象進(jìn)行操作的權(quán)限,對(duì)象權(quán)限主要是針對(duì)數(shù)據(jù)庫(kù)對(duì)象執(zhí)行某些操作的權(quán)限艰管,如對(duì)表的增刪改查等蒋川。
(3)角色
角色相當(dāng)于Windows操作系統(tǒng)中的用戶組,可以集中管理數(shù)據(jù)庫(kù)或服務(wù)器的權(quán)限缸浦。使用角色具有以下有點(diǎn)懒构。
- 權(quán)限管理更方便。將角色賦予多個(gè)用戶絮姆,實(shí)現(xiàn)不同用戶相同的授權(quán)。如果需要修改這些用戶的權(quán)限蚁阳,只需修改角色即可鸽照。
- 角色權(quán)限可以激活和關(guān)閉矮燎。
- 提高性能,使用角色減少了數(shù)據(jù)字典中授權(quán)記錄的數(shù)量澜沟,通過關(guān)閉角色使得在語(yǔ)句執(zhí)行過程中減少了權(quán)限的確認(rèn)峡谊。
(4)數(shù)據(jù)庫(kù)對(duì)象
數(shù)據(jù)庫(kù)對(duì)象包括表、索引濒析、視圖啥纸、觸發(fā)器、規(guī)則和存儲(chǔ)過程馒索,創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象的用戶是數(shù)據(jù)庫(kù)對(duì)象的所有者名船,數(shù)據(jù)庫(kù)對(duì)象可以授予其他用戶使用其擁有對(duì)象的權(quán)力渠驼。
(5)系統(tǒng)管理員
系統(tǒng)管理員是負(fù)責(zé)管理SQL Server全面性能和綜合應(yīng)用的管理員,簡(jiǎn)稱sa百揭。系統(tǒng)管理員的工作包括安裝SQL Server蜓席、配置服務(wù)器、管理和監(jiān)視磁盤空間祈秕、內(nèi)存和連接的使用、創(chuàng)建設(shè)備和數(shù)據(jù)庫(kù)志鞍、確認(rèn)用戶和授權(quán)許可等方仿。
(6)許可系統(tǒng)
使用許可可以增加SQL Server數(shù)據(jù)庫(kù)的安全性仙蚜,SQL Server許可系統(tǒng)指定那些用戶被授予使用那些數(shù)據(jù)庫(kù)對(duì)象的操作,指定許可的能力由每個(gè)用戶的狀態(tài)決定黍翎。
三.登陸賬戶的管理
1.創(chuàng)建登陸賬戶
--需要在本地用戶和組中創(chuàng)建DataBaseAdmin這個(gè)用戶艳丛,才能在數(shù)據(jù)庫(kù)該登陸用戶
CREATE LOGIN [DESKTOP-D17RDQA\DataBaseAdmin] FROM WINDOWS
WITH DEFAULT_DATABASE=my_db;
--創(chuàng)建登陸賬戶
CREATE LOGIN dba WITH PASSWORD='abc1234@',
default_database=my_db
2.修改登陸賬戶
--將DBAdmin登陸名修改為NewAdmin
ALTER LOGIN DBAdmin WITH NAME=BD_Admin
3.刪除登陸賬戶
DROP LOGIN BD_Admin
4.在數(shù)據(jù)庫(kù)中添加用戶
--在數(shù)據(jù)庫(kù) my_db 中建立一個(gè)“數(shù)據(jù)庫(kù)用戶”氮双,賦予這個(gè)“數(shù)據(jù)庫(kù)用戶”
-- 某些訪問權(quán)限霎匈,并且把登陸帳戶“dba” 和這個(gè)“數(shù)據(jù)庫(kù)用戶” 映射起來铛嘱。
CREATE USER dba FOR LOGIN dba WITH default_schema=my_db
四.SQL Server的角色管理
使用登陸賬戶可以連接到服務(wù)器,但是如果不為登陸賬戶分配權(quán)限球匕,則依然無法對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行訪問和管理帖烘。
按照角色的作用范圍,可以將其分為4類:固定服務(wù)器角色照卦、數(shù)據(jù)庫(kù)角色乡摹、自定義數(shù)據(jù)庫(kù)角色和應(yīng)用程序角色聪廉,角色相當(dāng)于Windows操作系統(tǒng)中的用戶組故慈,可以集中管理數(shù)據(jù)庫(kù)或服務(wù)器的權(quán)限图云。
1.固定服務(wù)器角色
(1)服務(wù)器角色中添加了SQL Server登陸名竣况、Windows賬戶和WIdows組。固定服務(wù)器角色的每個(gè)成員都可以向其所屬角色添加其他登陸名情萤。
固定服務(wù)器角色 | 說明 |
---|---|
sysadmin | 執(zhí)行SQL Server中的任何動(dòng)作 |
serveradmin | 配置服務(wù)器設(shè)置 |
setupadmin | 安裝復(fù)制和管理擴(kuò)展過程 |
securityadmin | 管理登錄和CREATE DATABASE的權(quán)限以及閱讀審計(jì) |
processadmin | 管理SQL Server進(jìn)程 |
dbcreator | 創(chuàng)建和修改數(shù)據(jù)庫(kù) |
diskadmin | 管理磁盤文件 |
(2)給登陸賬戶添加固定服務(wù)器角色
--exec sp_addsrvrolemember '登陸賬戶','固定服務(wù)器角色'
exec sp_addsrvrolemember 'dba','sysadmin'
2.固定數(shù)據(jù)庫(kù)角色
(1)數(shù)據(jù)庫(kù)角色是針對(duì)某個(gè)具體數(shù)據(jù)庫(kù)的權(quán)限分配的筋岛,數(shù)據(jù)庫(kù)用戶可以作為數(shù)據(jù)庫(kù)角色的 成員晒哄,繼承數(shù)據(jù)庫(kù)角色的權(quán)限,數(shù)據(jù)庫(kù)管理人員也可以通過管理角色的權(quán)限來管理數(shù)據(jù)庫(kù)用戶的權(quán)限柒傻。
固定數(shù)據(jù)庫(kù)角色 | 說 明 |
---|---|
db_owner | 可以執(zhí)行數(shù)據(jù)庫(kù)中技術(shù)所有動(dòng)作的用戶 |
db_accessadmin | 可以添加较木、刪除用戶的用戶 |
db_datareader | 可以查看所有數(shù)據(jù)庫(kù)中用戶表內(nèi)數(shù)據(jù)的用戶 |
db_datawriter | 可以添加伐债、修改或刪除所有數(shù)據(jù)庫(kù)中用戶表內(nèi)數(shù)據(jù)的用戶 |
db_ddladmin | 可以在數(shù)據(jù)庫(kù)中執(zhí)行所有DDL操作的用戶 |
db_securityadmin | 可以管理數(shù)據(jù)庫(kù)中與安全權(quán)限有關(guān)所有動(dòng)作的用戶 |
db_backoperator | 可以備份數(shù)據(jù)庫(kù)的用戶(并可以發(fā)布DBCC和CHECKPOINT語(yǔ)句峰锁,這兩個(gè)語(yǔ)句一般在備份前都會(huì)被執(zhí)行) |
db_denydatareader | 不能看到數(shù)據(jù)庫(kù)中任何數(shù)據(jù)的用戶 |
db_denydatawriter | 不能改變數(shù)據(jù)庫(kù)中任何數(shù)據(jù)的用戶 |
(2)給用戶添加固定數(shù)據(jù)庫(kù)角色
--為當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)角色添加數(shù)據(jù)庫(kù)用戶、數(shù)據(jù)庫(kù)角色祖今、Windows 登錄名或 Windows 組校坑。
--通過加入數(shù)據(jù)庫(kù)角色,賦予數(shù)據(jù)庫(kù)用戶“db_owner”權(quán)限
EXEC sp_addrolemember 'db_owner','dba'
3.應(yīng)用程序角色
應(yīng)用程序角色能夠其自身千诬、類似用戶的權(quán)限來運(yùn)行耍目,它是一個(gè)數(shù)據(jù)庫(kù)主體。只允許通過特定應(yīng)用程序連接的用戶訪問特定數(shù)據(jù)徐绑。
與服務(wù)器角色和數(shù)據(jù)庫(kù)角色不同邪驮,SQL Server中的應(yīng)用程序角色在默認(rèn)情況下不包含任何成員,并且應(yīng)用程序角色必須激活后才能發(fā)揮作用傲茄。當(dāng)激活某個(gè)應(yīng)用程序角色之后毅访,連接將失去用戶權(quán)限沮榜,轉(zhuǎn)而獲得應(yīng)用程序權(quán)限。
應(yīng)用程序角色的特殊之處
- 應(yīng)用程序角色使應(yīng)用程序能夠用其自身的蟆融、類似用戶的特權(quán)來運(yùn)行。使用
應(yīng)用程序角色可以只允許通過特定應(yīng)用程序連接的用戶訪問特定數(shù)據(jù)守呜。 - 與數(shù)據(jù)庫(kù)角色不同的是型酥,應(yīng)用程序角色默認(rèn)情況下不包含任何成員,而且是非活動(dòng)
的查乒,必須激活之后才能發(fā)揮作用弥喉。 - 應(yīng)用程序角色有密碼,只有擁有應(yīng)用程序角色并且擁有正確密碼的用戶才
可以激活該角色玛迄。 - 當(dāng)激活某個(gè)應(yīng)用程序角色之后由境,用戶會(huì)失去自己原有的權(quán)限,轉(zhuǎn)而擁有應(yīng)
用程序角色的權(quán)限蓖议。
1.創(chuàng)建應(yīng)用角色
--創(chuàng)建名稱為App_User的應(yīng)用程序角色
CREATE APPLICATION ROLE App_User
WITH PASSWORD='123pwd'
2.激活應(yīng)用角色
EXECUTE sp_setapprole 應(yīng)用角色名稱,應(yīng)用角色密碼
EXECUTE sp_setapprole 'FinancialRole','123pwd'
--激活應(yīng)用角色后虏杰,連接將失去用戶權(quán)限,轉(zhuǎn)而獲得應(yīng)用程序權(quán)限勒虾。
--只能對(duì)有應(yīng)用角色的數(shù)據(jù)庫(kù)進(jìn)行激活嘹屯,激活后在‘執(zhí)行’處只能看到擁有應(yīng)用角色的數(shù)據(jù)庫(kù)
--使用SQL語(yǔ)句將提示無權(quán)限
SELECT * FROM employee