2024年6月5日 星期三

[研究]SQL Server 帳號如果伺服器角色連預設的 public 都沒勾選,可以 SELECT 嗎?

[研究]SQL Server 帳號如果伺服器角色連預設的 public 都沒勾選,可以 SELECT 嗎?

2024-06-04

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

SQL Server 帳號如果伺服器角色連預設的 public 都沒勾選,可以 SELECT 嗎 ?

ChatGPT

在 SQL Server 中,所有的使用者帳號(包括 SQL Server 登錄和 Windows 登錄)默認都屬於 public 伺服器角色。public 伺服器角色是一個特殊的角色,無法被移除或取消勾選。它確保了每個使用者至少有基本的權限。即使沒有顯式地為某個帳號分配伺服器角色或數據庫角色,該帳號仍然會屬於 public 角色。

若假設某個帳號真的在所有伺服器角色中都未被勾選,甚至包括 public 角色,這個帳號將無法進行任何操作,包括基本的 SELECT 查詢,因為它沒有任何權限。

然而,這在實際操作中是不可能的,因為:

public 角色無法被取消:所有的使用者帳號必然屬於 public 角色。

權限的最小集合:public 角色賦予了基本的權限集合,確保使用者至少可以連接到數據庫並查詢一些系統目錄視圖。

因此,在 SQL Server 中,任何帳號至少屬於 public 角色,並具有該角色的權限。這意味著,該帳號可以進行一些基本的操作,例如連接到數據庫。如果你希望某個帳號不能執行 SELECT 查詢,你需要顯式地從該帳號所屬的數據庫或對象中撤銷查詢權限。具體操作如下:

DENY SELECT ON [table_name] TO [user_name];

或者,如果你想讓某個帳號在特定數據庫中無法執行任何操作,可以通過以下步驟實現:

移除所有顯式的權限:確保該帳號沒有任何授予的權限。

使用 DENY 語句:明確拒絕該帳號對特定數據庫或表的權限。

總結來說,SQL Server 保證每個使用者帳號至少屬於 public 角色,因此該帳號可以進行基本的操作。如果需要限制帳號的權限,需進一步配置具體的權限拒絕策略。

********************************************************************************

實際測試,public前的勾選是預設的,且無法被取消。


(完)

相關

[研究]SQL Server 角色權限、可執行 SQL 指令、可檢視動態資料遮罩比較https://shaurong.blogspot.com/2024/06/sql-server-sql.html


沒有留言:

張貼留言