iT邦幫忙

0

MSSQL PROC 帳號權限問題

  • 分享至 

  • xImage

您好:
一般在MSSQL 中,一個帳號
給予一個proc 權限
那,這一個proc 裡面有多個TABLE 乃至 跨DB 的TABLE/VIEW

這樣需要 逐一給TABLE 權限嗎?

謝謝

pilipala iT邦研究生 5 級 ‧ 2023-07-30 20:16:09 檢舉
最簡單就是給該帳號 DB Owner 權限,再進一步細部就是以 db_datareader、db_datawriter 來區分

你的描述太模糊,具體一點會比較容易討論
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
純真的人
iT邦大師 1 級 ‧ 2023-07-31 03:08:22

這個你直接測試不就得了~反正不行就會給你報錯而已~
這不太需要推測吧~有過就有過~沒過就知道問題點了。

0
sam0407
iT邦大師 1 級 ‧ 2023-07-31 10:56:32

  避免我的理解錯誤,先確認下我們的認知是否相同

  我們在作SQL Server上的物件存取時,完整的指令會這樣下:
Select * from [Server_Name].[DB_Name].[Owner].[Object]

  您問題中提到的proc就是上面指令的[Owner]嗎?

  如果是,那您新建一個帳號並給予proc權限,要讀取proc下的物件應該是沒有問題,不過若是跨DB的物件,則要先確認您現行proc帳號是否可以正常存取這些跨DB的物件。如果不行存取,那您要先解決這些跨DB物件的權限問題。

noway iT邦研究生 1 級 ‧ 2023-08-02 08:21:33 檢舉

您好:
一般用 dbo 這一個
我建立一個 create proc xx_proc
as Select * from [Server_Name].[DB_Name].[Owner].[Object]

然後建立一個 燈入帳號 ACT
並授予 ACT 有 執行 xx_proc 的權力

但沒有授予 ACT 的 DB_Name].[Owner].[Object] select 權限

這樣執行xx_proc 時,是否會因為 沒有TABLE,FUNCTION 的權限,就無法執行?

若是這樣,一個proc 內含多個 TABLE,FUNCTION
就得逐一開放權限?

謝謝

sam0407 iT邦大師 1 級 ‧ 2023-08-08 09:44:44 檢舉

  資料庫的權限控管設計是很嚴謹的,沒有權限就不能讀取到資料是最基本的要求。所以您想的沒有錯,若Stored Procedure裡有用到沒有權限的物件是會報錯的。

  如果用到這個SP的人很多,您也可以建一個專用帳號設好權限,讓其他使用者可以用EXECUTE AS指令來執行這支SP,使用方法請參閱連結:EXECUTE AS (Transact-SQL)

noway iT邦研究生 1 級 ‧ 2023-08-12 15:46:12 檢舉

您好:
謝謝!

應該是說,ACT帳號,我是要拿來做批次執行的帳號
會將他寫在C# 中。

ACT帳號
|--執行一個主要proc_M,只有2個TABLE 關聯起來
|--proc_M撈出的資料, 會組合成語法,執行其他PROC_D
|---PROC_D1 ,不同TABLE
|---PROC_D2 ,不同TABLE

所以,若要一個一個針對有用到的TABLE 來授權,蠻多的
又不想 用原來較高權限等級 DBWONER 帳號owner,放在C#內。

所以才會享有方式較好。

若是用 execute as,那要

GRANT IMPERSONATE ON USER:: owner TO ACT;

用ACT登錄
EXECUTE AS USER = 'owner';
exec proc_M

這樣嗎?
謝謝

0
WUcheap
iT邦研究生 5 級 ‧ 2023-08-02 14:56:25

登入帳號USER1有Stored Procedure sp_test的權限
sp_test裡有使用到 TABLE1 和 VIEW1 和 FUN1
那 TABLE1 和 VIEW1 和 FUN1 的權限都需要開給USER1

我要發表回答

立即登入回答