核心概念區分:伺服器層級 vs 資料庫層級
SQL Server 2005 對安全性架構大幅重構。一個伺服器實例包含一到多個資料庫,相關物件分層如下:
伺服器層級
- 伺服器登入:具備登入伺服器實例權限的主體
- 伺服器角色:固定的 9 組伺服器層級角色(如 sysadmin、securityadmin 等),不可新增/修改/刪除
登入必須隸屬某些伺服器角色(預設為 public),但登入不代表擁有資料庫操作權限。
資料庫層級
- 資料庫用戶:對應伺服器登入,具備操作特定資料庫權限
- 資料庫角色:可自訂的角色集合,彈性指派權限
- 資料庫結構描述:資料庫物件的容器,類似命名空間,用戶透過結構描述存取物件
關係鏈總覽
- 伺服器登入隸屬某組伺服器角色
- 伺服器登入需對應資料庫用戶,始能操作該資料庫
- 資料庫用戶隸屬某組資料庫角色以取得權限
- 資料庫角色擁有對應結構描述,用戶透過角色間接擁有結構描述
- 用戶有預設結構描述,查詢可直接用「物件名」存取
- 非預設結構描述需用「結構描述名.物件名」存取
建立非 SA 帳戶並配置資料庫完整流程
- 新增登入
Login1
- 新增資料庫
DB1
- 新增結構描述
Schema1
- 新增資料庫用戶
User1,對應 Login1,預設結構描述設為 Schema1,加入 db_owner 角色
- 在
Login1 屬性的「使用者對應」頁面,勾選 DB1,用戶名填 User1,預設結構描述選 Schema1
- 後續建立資料表將為
Schema1.Table1 格式
- 同一用戶若擁有其他結構描述(如
Schema2),亦可存取 Schema2.Table2
特別注意事項
- 多個資料庫可有相同名稱的用戶(對應同一登入)
- 單一資料庫內用戶名稱不可重複
- 結構描述分離了物件擁有者與使用者,提升管理彈性