Sql-Server-2014

如何確定需要為新創建的登錄分配哪些權限?

  • September 4, 2019

我們有 4 個數據庫,其中包含不同的程序和功能。到目前為止,實際應用程序只能使用 sa 帳戶訪問數據庫,現在我想將應用程序更改為使用 sa 帳戶以外的其他東西。為此,我需要創建一個新的 SQL 登錄名並為該登錄名分配某些權限。有沒有類似腳本的方法來確定我需要為新創建的使用者分配哪些權限?

@Ross的連結肯定會幫助您確定語法以及所有選項是什麼,但需要更多指導:

有兩個數據庫角色可能對您有用,它們是 db_datawriter 和 db_datareader。他們兩個可能會處理您的大部分 CRUD(創建、讀取、更新、刪除)操作。

ALTER ROLE db_datareader ADD MEMBER <user>
ALTER ROLE db_datawriter ADD MEMBER <user>

如果您願意/需要,您可以得到比這更細化的資訊。例如,允許插入,但不允許更新或刪除表。

您在標籤中提到了儲存過程,所以這些可能有點棘手。一種更簡單的方法是在架構上授予執行權限。但您也可以一次授予他們一個。

--all stored procedures in schema dbo
GRANT EXECUTE ON SCHEMA::dbo TO <user>

--specific stored procedure
GRANT EXECUTE ON dbo.uspDoMyThing TO <user>

最後,如果您允許應用程序執行 TRUNCATE,那麼除了 db_datawriter 之外,它們實際上還需要 ALTER TABLE 權限。

GRANT ALTER TABLE ON dbo.MyTable TO <user>

恭喜您正確控制了伺服器的安全性。即使您最終必須在數據庫中授予 db_owner,這也比 sysadmin 好得多。

一些最後的筆記:

  • 顯式拒絕權限優先於授予。
  • 為架構分配權限將授予該架構中所有對象的權限(即使它們是稍後創建的)。
  • 我將從所有儲存過程的 db_datareader、db_datawriter 和 EXECUTE 開始,這將使您以最少的維護速度更快地執行。它可能比必要的範圍更廣,但可以將造成的損害降到最低。

SQL Server 文件應提供確定登錄權限所需的資訊。

https://docs.microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-2017

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