一般數據庫的權限操作我們很少用,除非一些大型的項目,需要給數據庫配置不同的用戶及權限,防患于未然,今天我們就來了解下t-sql中配置用戶權限操作。
先看示例代碼:
1
--
創建登錄名
2
create
login text1
3
with
password
=
'
password1
'
,
4
check_policy
=
off
;
5
6
--
修改登錄名
7
alter
login text1
8
with
name
=
test1
9
go
10
alter
login test1 disable
11
12
--
修改登錄名密碼
13
alter
login test1
14
with
password
=
'
123456
'
15
old_password
=
'
password1
'
;
16
17
--
刪除登錄名
18
drop
login test1
19
--
--------------
20
--
創建用戶
21
use
AdventureWorks
22
create
user
user1
23
for
login text1
24
25
--
修改用戶
26
alter
user
user1
27
with
name
=
use2;
28
29
--
刪除用戶
30
drop
user
user2
31
32
--
查看當前數據庫對應的用戶
33
select
USER_NAME
()
34
SELECT
CURRENT_USER
AS
'
Current User Name
'
;
這些語法都很簡單我們主需要記住就行,當然通過SQLSERVER的可視化界面也可以配置。
下面我們也通過一個實例來理解和運用配置用戶權限。
實例要求:
1.建立兩個用戶,user1,user2
2.user1具有操作數據庫ExamMis的所有權限
3.轉換上下文到USer1下,建立一個函數:f_GetQuestionDetails,該函數返回題目內容(包括題干,分題項,題型三個表的關聯內容)
4.賦權限給user2:讓其只具有執行該函數的權限;
5.轉換上下文到user2,執行函數調用。
1,
建立兩個用戶,user1,user2
創建兩個登陸名,并在為登陸名創建user1和user2用戶。
示例代碼:
1
create
login TestUser1
2
with
password
=
'
password1
'
;
3
4
create
user
User1
5
for
login TestUser1
6
with
default_schema
=
dbo;
7
8
create
login TestUser2
9
with
password
=
'
password2
'
;
10
11
create
user
User2
12
for
login TestUser2
2, user1具有操作數據庫ExamMis的所有權限
這個操作有三種方法:
1,SQLSERVER可視化操作。
2,grant all去給用戶分配權限。
3,通過SQLSERVER系統自帶的存儲過程分配權限。
這里我們先講一下grant的用法,grant是用來給用戶分配權限用的。
我們先看一個示例代碼:
1
grant
all
2
on
database
::ExamMis
3
to
User1
4
WITH
GRANT
OPTION
這段代碼的意思就是給 User1分配具有操作ExamMis數據庫的一切權限。all關鍵字的意思是所有權限,也可以指定某一權限,比如查詢權限就可以寫grant select,
當然 on 后面也可以是表,函數,存儲過程,視圖等。
示例代碼:
1
grant
select
,
insert
,
update
2
on
table
::student
3
to
User1
4
WITH
GRANT
OPTION
? 這段代碼的意思是給用戶user1在student表分配具有查詢,插入,更新的權限,但是沒有刪除得權限。
通過SQLSERVER系統自帶的存儲過程分配權限,示例代碼:
1
EXEC
sp_addrolemember N
'
db_owner
'
, N
'
User1
'
? sp_addrolemember是系統自帶的存儲過程, db_owner 的意思是所有者,可視化操作的時候我們也會看到。當然還有一些其他的一些存儲過程,在文章的后面會給大家整理出來。
3, 轉換上下文到User1下,建立一個函數:f_GetQuestionDetails
執行上下面到User1下:
1
EXECUTE
AS
LOGIN
=
'
TestUser1
'
我們可以通過select USER_NAME(); 來查看當前用戶名。
下面我們創建函數: f_GetQuestionDetails ,函數具有返回值,返回table。
示例代碼:
1
create
function
Select_Questions()
2
returns
table
3
as
4
return
5
(
6
select
t1.
*
,t2.TypeName,t2.Score,t3.SelectionNo,t3.SelectionTitle,t3.IsAnswer
from
dbo.Questions t1
7
inner
join
dbo.QuestionType t2
on
t1.TypeNo
=
t2.
[
no
]
8
inner
join
dbo.QuestionSelections t3
on
t1.
[
no
]
=
t3.QuestionNo
9
);
函數的用法很簡單,就不單列去講解了,和我們編程時候用的方法類似,只是語法不同而已,大家熟悉用就行。
4,函數 賦權限給user2:讓其只具有執行該函數的權限;
這一步我們可以直接用上面提到的grant去給用戶user2分配權限。
這里我們就多做一部,創建一個角色,然這個角色具有操作這個函數的權限,然后把角色分配給用戶user2。
一般我們項目的權限管理都是這個設計:用戶->角色->權限。
示例代碼:
1
create
role Select_Fuction
--
創建角色
2
3
GRANT
select
4
ON
OBJECT::dbo.Select_Questions
5
TO
Select_Fuction;
6
7
exec
sp_addrolemember
'
Select_Fuction
'
,
'
User2
'
--
將Select_Fuction角色添加到User2用戶中
5.轉換上下文到user2,執行函數調用。
示例代碼:
1
REVERT;
2
EXECUTE
AS
LOGIN
=
'
TestUser2
'
3
select
USER_NAME
()
4
5
select
*
from
Select_Questions()
REVERT;的意思是切換上下文。
? 執行完操作我們把登陸名,用戶名刪掉:
1
drop
function
Select_Questions
2
drop
login TestUser1
3
drop
login TestUser2
4
drop
user
user1
5
drop
user
user2
? 用戶權限配置系統存儲過程
1
sp_addlogin 登錄名,登陸密碼,默認數據庫,默認語言,安全碼,是否加密
2
sp_password 舊密碼,新密碼,指定登錄號
3
sp_defaultdb 指定登錄號,默認數據庫
4
sp_defaultlanguage 指定登錄號,默認語言
5
sp_helplogins 指定登錄號
6
sp_droplogin 指定登錄號
7
8
--
-----------------------數據庫用戶管理---
9
sp_grantdbaccess 登錄號,數據庫用戶名
10
sp_helpuser 數據庫用戶名
11
sp_revokedbaccess 指定數據庫用戶名
12
13
--
----------------------服務器角色--------
14
sp_addsrvrolermemeber 登陸賬號名,服務器角色名
15
sp_dropsrvrolermember 登陸用戶名,服務器角色名
16
17
--
----------------------數據庫角色---------
18
19
sp_addrole 數據庫角色名,數據庫角色的所有者
20
sp_droprole 數據庫角色名
21
22
--
----------創建數據庫角色的成員----
23
24
sp_addrolemember 數據庫角色名,數據庫用戶
25
sp_droprolemember 數據庫角色名,數據庫用戶
t-sql中的用戶權限配置就講到這,這一部分的內容我們很少去涉及,但是還是了解一些,說不準哪天DB不在,經理讓你去配數據庫用戶呢,編程的都不會,就你會,自己是不是很有面子啊。哈哈。
以后繼續整理一下編程相關的知識,請大家多多關注。。。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

