首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server User 與 Schema 關係深度解析:從 2000 到 2005 的架構演進

     編輯:關於SqlServer

核心概念釐清

在 SQL Server 2000 中,User 與 Schema 綁定緊密(同名預設 Schema),導致許多開發者混淆兩者。SQL Server 2005 徹底分離兩者:User 是資料庫層級的安全主體,Schema 是物件容器(命名空間),兩者是完全不同概念。

生動比喻:倉庫、房間與主人

概念比喻說明
Database大倉庫最外層容器
Schema房間倉庫內的獨立空間,包含物件(Table、View 等)
Table床放置資料的基本單元,必須在房間內
User房間主人/倉庫擁有者User 對應 Database,擁有倉庫鑰匙,可存取所有房間
Role權限規則決定 User 在特定房間能做什麼(唯讀/讀寫)

關鍵點:Schema 包含的是 Object,不是 User。User 是 Database 的主人,擁有所有 Schema 的存取權(受 Role 限制)。

SQL Server 2000 vs 2005 行為差異

SQL Server 2000

  • 建立 User Bosco → 自動建立同名 Schema Bosco
  • User 與 Schema 1:1 綁定,名稱相同,極易混淆

SQL Server 2005

  • sp_adduser(相容性保留)建立 User 時,仍自動建立同名 Schema
  • 新 DDL:CREATE USER 可指定 DEFAULT_SCHEMA;CREATE SCHEMA 獨立建立
  • 未指定預設 Schema 時,預設為 dbo Schema(公共房間)

物件建立時的 Schema 解析規則

執行 CREATE TABLE A 時,A 會建立在哪個 Schema?依優先順序:

  1. 當前使用者有指定 DEFAULT_SCHEMA → 建立在該 Schema
  2. 無預設 Schema,但存在同名 Schema → 忽略同名 Schema,建立在 dbo
  3. 語句指定 Schema 前綴(如 CREATE TABLE MySchema.A) → 建立在指定 Schema(需權限)

陷阱警示:若使用者只有 dbo 唯讀權限,建立表會失敗,即使有同名 Schema 也不會用到。

查詢時的 Schema 搜尋順序

登入 User Sue(預設 Schema 為 Sue),執行 SELECT * FROM mytable:

  1. sys.mytable(系統 Schema)
  2. Sue.mytable(預設 Schema)
  3. dbo.mytable(公共 Schema)

最佳實務:查詢與 DDL 操作永遠明確指定 Schema 前綴,避免掃描 sys、提升效能、防止歧義。

系統內建不可刪除的 4 個 Schema

  • dbo:預設公共 Schema,也是一個 User
  • guest:來賓 Schema
  • sys:系統物件 Schema
  • INFORMATION_SCHEMA:標準資訊檢視 Schema

其他使用者建立的 Schema 可刪除,這 4 個不可刪除。

總結

User = 安全主體(誰),Schema = 物件容器(放哪)。SQL Server 2005 明確分離兩者,採用 CREATE USER/CREATE SCHEMA、明確指定 DEFAULT_SCHEMA、操作時加 Schema 前綴,是現代 SQL Server 開發的標準作法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved