日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个权限的设置,你会混淆么

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个权限的设置,你会混淆么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗環境;

1 創建一個schema

Schema
CREATE?SCHEMA?[Sales]?AUTHORIZATION?[dbo]

?

2 創建兩個表,一個視圖,一個存儲過程

[Sales].[Customer]
CREATE?TABLE?[Sales].[Customer](
????
[Customer_ID]?[int]?NOT?NULL,
????
[Customer_Name]?[nvarchar](50)?COLLATE?SQL_Latin1_General_CP1_CI_AS?NOT?NULL,
?
CONSTRAINT?[PK_Sales.Customer]?PRIMARY?KEY?CLUSTERED?
(
????
[Customer_ID]?ASC
)
WITH?(IGNORE_DUP_KEY?=?OFF)?ON?[PRIMARY]
)?
ON?[PRIMARY]
[Sales].[CustomerContacts]
CREATE?TABLE?[Sales].[CustomerContacts](
????
[Customer_ID]?[int]?NOT?NULL,
????
[Customer_Address]?[nvarchar](50)?COLLATE?SQL_Latin1_General_CP1_CI_AS?NOT?NULL
)?
ON?[PRIMARY]

GO

ALTER?TABLE?[Sales].[CustomerContacts]??WITH?CHECK?ADD??CONSTRAINT?[FK_CustomerContacts_Customer]?FOREIGN?KEY([Customer_ID])
REFERENCES?[Sales].[Customer]?([Customer_ID])
[Sales].[ContactList]
CREATE?VIEW?[Sales].[ContactList]
AS
SELECT?????Sales.Customer.Customer_ID,?Sales.Customer.Customer_Name,?Sales.CustomerContacts.Customer_Address
FROM?????????Sales.Customer?INNER?JOIN
??????????????????????Sales.CustomerContacts?
ON?Sales.Customer.Customer_ID?=?Sales.CustomerContacts.Customer_ID
[Sales].[GetContact]
CREATE?PROCEDURE?[Sales].[GetContact]
AS
BEGIN
????
--?SET?NOCOUNT?ON?added?to?prevent?extra?result?sets?from
????--?interfering?with?SELECT?statements.
????SET?NOCOUNT?ON;

????
--?Insert?statements?for?procedure?here
????SELECT?*?from?Sales.ContactList
END

?

3 創建一個login

Login
CREATE?LOGIN?[SaleA]?WITH?PASSWORD=N'password',?DEFAULT_DATABASE=[MyDB],?DEFAULT_LANGUAGE=[us_english],?CHECK_EXPIRATION=OFF,?CHECK_POLICY=OFF

?

這個時候使用SaleA登錄MyDB是沒有任何權限的。執行下列命令會得到4個錯誤

T-SQL
select?*?from?Sales.Customer
select?*?from?Sales.CustomerContacts
select?*?from?Sales.ContactList
exec?Sales.GetContact

錯誤信息:
Msg 229, Level 14, State 5, Line 1
SELECT permission denied on object 'Customer', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Line 2
SELECT permission denied on object 'CustomerContacts', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Line 3
SELECT permission denied on object 'ContactList', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Procedure GetContact, Line 1
EXECUTE permission denied on object 'GetContact', database 'MyDB', schema 'Sales'.

但是你如果賦予SaleA執行存貯過程的權限,你就可以得到訪問到sp所對應的視圖,視圖所對應的表的內容了。

我開始是以為SaleA的權限應該包含試圖的select權限的。唉,真是實踐一下,才能知道不是這個樣子的。

這樣的設計應該是為了了管理的方便,如果需要級聯權限,肯定會暈掉的,這樣的簡潔明了的方式之值得我們學習和應用到其他的設計中去的

?

總結

以上是生活随笔為你收集整理的一个权限的设置,你会混淆么的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。