Sql-Server

權限層次結構與 WITH GRANT OPTION

  • January 16, 2022

我有一個具有此安全設置的 Azure SQL 數據庫:

  • SchemaUpdater具有db_ddladmindb_datawriterdb_datareader角色的使用者。使用者用於在應用程序部署期間執行數據庫更改腳本。
  • App具有db_datawriter, 和db_datareader角色的使用者。應用程序使用使用者來處理數據。

我希望應用程序使用者也執行一個儲存過程,比如dbo.sp_MyProc. 我做了以下工作:

  1. grant execute to [SchemaUpdater] with grant option使用管理員帳戶,以便更改腳本可以授予任何 SP 的權限。
  2. 在更改腳本中創建了儲存過程。
  3. 嘗試grant execute on [dbo].[sp_MyProc] to [App]在相同的更改腳本中。那沒有用。

該步驟失敗了

Cannot find the object 'sp_MyProc', because it does not exist or you do not have permission.

有趣的是,如果沒有提到單獨的SchemaUpdaterSP grant execute to [App],它會起作用。

我的問題是:

  1. 為什麼不能SchemaUpdater授予單個 SP 的權限,但可以授予所有 SP?
  2. 是否SchemaUpdater缺少其他一些權限,以便它可以向單個 SP 授予權限?

不幸的WITH GRANT是,在某些或所有情況下,權限不會被繼承。我在文件或其他文章中找不到任何內容

$$ cue thunder $$全球資訊網$$ stop thunder $$不過,說明這一點。我和你一樣,我希望它會被繼承。 我在 SQL Server 2016 上對此進行了測試,並得到了與您相同的結果。有幾個選項可以解決它,但最細粒度的選項是分配EXECUTE WITH GRANT給每個儲存過程的 SchemaUpdater。

GRANT EXECUTE ON [dbo].[sp_MyProc] TO [SchemaUpdater] WITH GRANT OPTION

我已經確認它WITH GRANT也不會在其他權限和對像上繼承。我在表上使用 VIEW DEFINITION 測試了相同的場景,並且在 SchemaUpdater 可以將該權限授予另一個使用者之前,必須在表上顯式地 GRANT WITH GRANT。

因此,您的問題的具體答案:

  1. 由於 WITH GRANT 不是繼承的,因此使用者必須對對象具有明確的 WITH GRANT 權限才能授予權限。由於 SchemaUpdater 在數據庫上有 EXECUTE WITH GRANT,它可以在數據庫上授予 EXECUTE。由於它在儲存過程上沒有顯式 EXECUTE WITH GRANT,因此它無法授予對該儲存過程的顯式權限。
  2. 如前所述,SchemaUpdater 需要在每個儲存過程上顯式執行 EXECUTE WITH GRANT,或者需要包含該權限的更高權限(例如 db_owner)。

WITH GRANT OPTION 早於 SQL 2005 中引入的增強授權模型,該模型啟用了數據庫級別和架構級別的授權。但即使它們是同時設計的,我懷疑這是否會被啟用。

例如,考慮一下,如果數據庫級別權限 WITH GRANT OPTION 的被授予者可以在對象級別授予相同的權限,那麼當您撤銷被授予者的權限時會發生什麼?

例如

USE tempdb

go
CREATE proc foo2
as
select 1 a
go

create user joe without login
create user alice without login
go
grant execute to joe with grant option

execute as user = 'joe'
   grant execute on foo to alice
revert 

go

revoke execute to joe cascade

go

execute as user='alice'
 exec foo2 
revert

SQL 必須跟踪 alice 的執行權限不僅是由 joe 授予的,它確實如此,而且是因為 joe 的模式級別或數據庫級別的權限而授予的。考慮到 joe 可能對對象具有數據庫級、模式級和對象級權限,這聽起來既難以實現又難以理解。

引用自:https://dba.stackexchange.com/questions/258079