為什麼以及如何以及在何處使用無需登錄的使用者
我一直在試圖找出為什麼、如何以及在何處使用未登錄的使用者,但我沒有找到我的確切問題或任何更接近的問題。我在哪裡進行研究(我還閱讀了其他文章,看過 Youtube 影片):
- https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9dbd233a-a105-473f-acab-6d8272d5772b/use-of-lt-sql-user-without-login-gt?forum=sqldatabaseengine
- https://blog.learningtree.com/sql-server-users-without-logins/
- https://blog.sqlauthority.com/2012/10/04/sql-server-importance-of-user-without-login-t-sql-demo-script/
- 將登錄名映射到創建時未映射到登錄名的使用者
- https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login-sql-server
我正在尋找使我的數據庫更安全的方法,最近我知道有一個選項可以在不登錄的情況下創建使用者。我認為這很好。但是我不明白如何使用它(不是創建,使用),然後經過研究,我意識到這個使用者在冒充另一個使用者/角色時訪問了數據庫。我認為沒有使用者並以某種方式訪問數據庫會很棒。但是當我看到有一個叫做執行的東西時,我認為它沒有用,因為為什麼我要對這個“無登錄”使用者執行查詢,因為它是另一個使用者?為什麼我只是不使用該使用者的權限?然後我想也許這個使用者權限太多了,所以我只是創建一個權限較少的新使用者……
好吧,我不知道你為什麼要創建一個沒有登錄的使用者。這個應該怎麼用?這很愚蠢,但我嘗試登錄並失敗(對不起,但我習慣於與使用者登錄,我從未想過創建使用者而不登錄,我只知道使用者登錄到某些東西,這就是我的知識所在) .
所以,我不知道為什麼要創建這種類型的使用者而不是普通使用者?我不知道如何(比如我登錄,我只是輸入查詢並使用它)?我不知道在哪裡(比如,我需要製作一個 C# 應用程序,我是否使用命令…)使用?
我的知識只帶我到這裡,我沒有高級 DBA 可以問。如果可能,請用簡單的話解釋。
想像一下,你有人在執行一個應用程序,這需要一定的權限。您確實希望能夠記錄誰在做什麼並查看誰登錄到您的 SQL Server。所以每個人都需要自己的登錄名(這可能是為域組創建的一個登錄名)。
讓這些人使用 SSMS 進行連接並在數據庫中玩耍,您會感到不舒服。由於應用程序可能需要對客戶表的 DELETE 權限(例如),因此最終使用者現在可以從 SSMS 執行此操作。
因此,您創建了一個沒有登錄的使用者,並讓應用程序使用 EXECUTE AS 作為該使用者。即,沒有 EXECUTE AS,最終使用者在數據庫中根本沒有權限(即,您為其創建登錄名的潛在 AD 組及其在數據庫中的後續使用者)。但是當他們執行 EXECUTE AS 時,他們確實有特權。
這是讀取安全性嗎?不,當然不。但也許比沒有可追溯性或讓最終使用者能夠“直接”在數據庫中玩耍要好。
應用程序角色呢?是的,這可能會更嚴格,因為它們受密碼保護。
另一種用法是在您測試事物時,使用 EXECUTE AS USER。您想嘗試一些與權限相關的東西,並且更容易將權限分配給沒有登錄的使用者,然後進行測試,然後必須為您想要測試的任何內容創建登錄名和使用者。