SQLServer之創建資料庫架構

来源:https://www.cnblogs.com/vuenote/archive/2019/01/23/10297074.html
-Advertisement-
Play Games

創建資料庫架構註意事項 包含 CREATE SCHEMA AUTHORIZATION 但未指定名稱的語句僅允許用於向後相容性。 該語句未引起錯誤,但未創建一個架構。 包含 CREATE SCHEMA AUTHORIZATION 但未指定名稱的語句僅允許用於向後相容性。 該語句未引起錯誤,但未創建一個 ...


創建資料庫架構註意事項

包含 CREATE SCHEMA AUTHORIZATION 但未指定名稱的語句僅允許用於向後相容性。 該語句未引起錯誤,但未創建一個架構。

CREATE SCHEMA 可以在單條語句中創建架構以及該架構所包含的表和視圖,並授予對任何安全對象的 GRANT、REVOKE 或 DENY 許可權。 此語句必須作為一個單獨的批處理執行。 CREATE SCHEMA 語句所創建的對象將在要創建的架構內進行創建。

CREATE SCHEMA 事務是原子級的。 如果 CREATE SCHEMA 語句執行期間出現任何錯誤,則不會創建任何指定的安全對象,也不會授予任何許可權。

由 CREATE SCHEMA 創建的安全對象可以任何順序列出,但引用其他視圖的視圖除外。 在這種情況下,被引用的視圖必須在引用它的視圖之前創建。

因此,GRANT 語句可以在創建某個對象自身之前對該對象授予許可權,CREATE VIEW 語句也可以出現在創建該視圖所引用表的 CREATE TABLE 語句之前。 同樣,CREATE TABLE 語句可以在 CREATE SCHEMA 語句定義表之前聲明表的外鍵。

執行 CREATE SCHEMA 的主體可以將另一個資料庫主體指定為要創建的架構的所有者。 完成此操作需要另外的許可權,如本主題下文中的“許可權”部分所述。

新架構由以下資料庫級別主體之一擁有:資料庫用戶、資料庫角色或應用程式角色。 在架構內創建的對象由架構所有者擁有,這些對象在 sys.objects 中的 principal_id為 NULL。 架構所包含對象的所有權可轉讓給任何資料庫級主體,但架構所有者始終保留對該架構內對象的 CONTROL 許可權。

隱式架構和用戶創建

在某些情況下,用戶可在沒有資料庫用戶帳戶(資料庫中的資料庫主體)的情況下使用資料庫。 這可發生在以下情況中:

  • 登錄名具有 CONTROL SERVER 特權。

  • Windows 用戶沒有單獨的資料庫用戶帳戶(資料庫中的資料庫主體),但以具有資料庫用戶帳戶(Windows 組的資料庫主體)的 Windows 組成員的身份訪問資料庫。

    如果沒有資料庫用戶帳戶的用戶在不指定現有架構的情況下創建對象,則將在資料庫中自動為該用戶創建資料庫主體和預設架構。 創建的資料庫主體和架構採用的名稱將與連接到 SQL Server 時用戶使用的名稱( SQL Server 身份驗證登錄名或 Windows 用戶名)相同。

    若要允許基於 Windows 組的用戶創建和擁有對象,此行為很有必要。 但這種行為可能將導致意外創建架構和用戶。 為了避免隱式創建用戶和架構,請儘可能顯式創建資料庫主體和分配預設架構。 或者,在資料庫中創建對象時,使用由兩部分或三部分組成的對象名稱顯式聲明現有架構。

當前支持不指定架構名稱的 CREATE SCHEMA 語句,目的是為了向後相容。 此類語句並不在資料庫中實際創建架構,但它們會創建表和視圖,並授予許可權。 主體不需要 CREATE SCHEMA 許可權來執行這一早期形式的 CREATE SCHEMA,因為不會創建任何架構。 此功能將從 SQL Server 的未來版本中刪除。

需要對資料庫擁有 CREATE SCHEMA 許可權。

若要創建在 CREATE SCHEMA 語句中指定的對象,用戶必須擁有相應的 CREATE 許可權。

若要指定其他用戶作為所創建架構的所有者,則調用方必須具有對該用戶的 IMPERSONATE 許可權。 如果指定一個資料庫角色作為所有者,則調用方必須擁有該角色的成員身份或對該角色擁有 ALTER 許可權。

使用SSMS資料庫管理工具創建資料庫架構

1、連接伺服器-》展開資料庫文件夾-》選擇資料庫並展開-》展開安全性-》展開架構-》右鍵單擊架構文件夾選擇創建架構。

2、在新建架構彈出框-》點擊常規-》輸入新建架構名稱-》點擊搜索選擇架構所有者。

3、在新建架構彈出框-》點擊許可權-》點擊搜索選擇新建架構的用戶或角色-》選擇用戶或角色後選擇新建架構的許可權。

4、在新建架構彈出框-》點擊擴展屬性-》輸入擴展屬性名稱和值-》點擊確定。

5、不需要刷新即可在對象資源管理器中查看創建結果。

 使用T-SQL腳本創建資料庫架構

語法

----聲明資料庫引用
--use database_name;
--go

----創建資料庫架構
--create schema schema_name authorization owner_name  
--{ table_definition | view_definition | grant_statement | revoke_statement | deny_statement }
--; 
--go

語法解析

--語法解析
--database_name
--架構所在的資料庫名

--schema_name
--在資料庫內標識架構的名稱。

--authorization owner_name
--指定將擁有架構的資料庫級主體的名稱。此主體還可以擁有其他架構,並且可以不使用當前架構作為其預設架構。

--table_definition
--指定在架構內創建表的CREATE TABLE語句。執行此語句的主體必須對當前資料庫具有CREATE TABLE許可權。

--view_definition
--指定在架構內創建視圖的CREATE VIEW語句。執行此語句的主體必須對當前資料庫具有CREATE VIEW許可權。

--grant_statement
--指定可對除新架構外的任何安全對象授予許可權的GRANT語句。

--revoke_statement
--指定可對除新架構外的任何安全對象撤消許可權的REVOKE語句。

--deny_statement
--指定可對除新架構外的任何安全對象拒絕授予許可權的DENY語句。

示例

--聲明資料庫引用
use [testss];
go

if exists(select * from sys.schemas where name='testarchitecture')
--刪除資料庫架構註釋
exec sys.sp_dropextendedproperty @name=N'testcrituer' , @level0type=N'schema',@level0name=N'testarchitecture';
	--刪除架構下的所有表
	if exists(select * from sys.tables where name='schema_table1')
	drop table [testarchitecture].[schema_table1];
	go
--刪除資料庫架構
drop schema testarchitecture;  
go

--創建資料庫架構
create schema [testarchitecture] authorization [db_accessadmin]
create table schema_table1
(
id int identity(1,1) not null,
name nvarchar(50),
primary key clustered(id asc) with(ignore_dup_key=off) on [primary]
)on [primary]
go


--授予插入
grant insert on schema::[testarchitecture] to [public];
go

--授予查看定義
grant view definition on schema::[testarchitecture] to [public];
go

--授予查看更改跟蹤
grant view change tracking on schema::[testarchitecture] to [public];
go

--授予創建序列
grant create sequence on schema::[testarchitecture] to [public];
go

--授予更改
grant alter on schema::[testarchitecture] to [public];
go
 
 --授予更新
grant update on schema::[testarchitecture] to [public];
go

--接管所有權
grant take ownership on schema::[testarchitecture] to [public];
go

--授予控制
grant control on schema::[testarchitecture] to [public];
go

--授予刪除
grant delete on schema::[testarchitecture] to [public];
go

--授予選擇
grant select on schema::[testarchitecture] to [public];
go

--授予引用
grant references on schema::[testarchitecture] to [public];
go

--授予執行
grant execute on schema::[testarchitecture] to [public];
go

----授予並允許轉授插入
--grant insert on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授查看定義
--grant view definition on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授查看更改跟蹤
--grant view change tracking on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授創建序列
--grant create sequence on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授更改
--grant alter on schema::[testarchitecture] to [public] with grant option;
--go
 
-- --授予並允許轉授更新
--grant update on schema::[testarchitecture] to [public] with grant option;
--go

----接管並允許轉授所有權
--grant take ownership on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授控制
--grant control on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授刪除
--grant delete on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授選擇
--grant select on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授引用
--grant references on schema::[testarchitecture] to [public] with grant option;
--go

----授予並允許轉授執行
--grant execute on schema::[testarchitecture] to [public] with grant option;
--go

----拒絕插入
--deny insert on schema::[testarchitecture] to [public];
--go

----拒絕查看定義
--deny view definition on schema::[testarchitecture] to [public];
--go

----拒絕查看更改跟蹤
--deny view change tracking on schema::[testarchitecture] to [public];
--go

----拒絕創建序列
--deny create sequence on schema::[testarchitecture] to [public];
--go

----拒絕更改
--deny alter on schema::[testarchitecture] to [public];
--go
 
----拒絕更新
--deny update on schema::[testarchitecture] to [public];
--go

----拒絕所有權
--deny take ownership on schema::[testarchitecture] to [public];
--go

----拒絕控制
--deny control on schema::[testarchitecture] to [public];
--go

----拒絕刪除
--deny delete on schema::[testarchitecture] to [public];
--go

----拒絕選擇
--deny select on schema::[testarchitecture] to [public];
--go

----拒絕引用
--deny references on schema::[testarchitecture] to [public];
--go

----拒絕執行
--deny execute on schema::[testarchitecture] to [public];
--go

--用戶或者角色
alter authorization on schema::[testarchitecture] to [public];
go

--創建擴展屬性
exec sys.sp_addextendedproperty @name=N'testcrituer', @value=N'測試創建資料庫架構' , @level0type=N'schema',@level0name=N'testarchitecture'
go

示例結果:使用T-SQL腳本創建資料庫架構需要刷新資料庫才能查看結果。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題 說下我linux配置情況,不一樣的可以選擇借鑒我的辦法。 在虛擬機中以最小化方式安裝centos7,ifconfig命令無效,而且在sbin目錄中沒有ifconfig文件。 原因 這是因為centos7已經不適用ifconfig命令了,已經用ip命令代替;同時網卡名稱也由eth0改為eno16 ...
  • VirtualBox安裝centos7配置靜態ip地址可以本機訪問,可以聯網。 在開始之前先說一下,不知道為什麼,我在網上百度的大多數是不能用的,或者只能主機訪問,或者只能聯網。 我的配置文件為ifcfg-enp0s3 話不多說:上圖 1.安裝完centos7之後進入 2.選擇設置 >網路 如下圖可 ...
  • 本文收錄在容器技術學習系列文章總目錄 1、kubernetes安裝介紹 1.1 K8S架構圖 1.2 K8S搭建安裝示意圖 1.3 安裝kubernetes方法 優點:你只要安裝kubeadm即可;kubeadm會幫你自動部署安裝K8S集群;如:初始化K8S集群、配置各個插件的證書認證、部署集群網路 ...
  • 命令: cp 對應英文: copy 作用: 複製文件或目錄 選項: -f:已存在的目標文件直接覆蓋,不會提示 -i:覆蓋文件前提示,接著輸入 y 或 n -r:若給出的源文件是目錄文件,則cp將遞歸複製該目錄下的所有子目錄和文件,目標文件必須是一個目錄名 用法: cp [選項] 源文件 目標文件 # ...
  • #字元串比較if [ "$1" == "判斷條件" ] then echo "$1" elif [ "$1" == "判斷條件" ] then echo "$1" else echo '[提示信息]' fi#數值比較int1 -eq int2 兩數相等為真int1 -ne int2 兩數不等為真in ...
  • 一 Ansible的安裝部署 1.1 PIP方式 略,可參考《001.Pip簡介及使用》。 提示:建議將PIP升級到最新:pip install --upgrade pip。 1.2 YUM方式 二 Ansible目錄及配置 2.1 Ansible目錄結構 配置文件目錄:/etc/ansible 主 ...
  • #日期時間 echo '日期時間' datetime=$(date "+%Y-%m-%d %H:%M:%S") echo "$datetime" ...
  • 前言 開心一刻 和朋友去吃小龍蝦,隔壁桌一個小女孩問媽媽:"媽媽,小龍蝦回不了家,它媽媽會不會著急?" 她媽媽愣住了,我扒蝦的手停下了,這麼善良的問題,怎麼下得了口。這是老闆急忙過來解圍:"不會的,不會的,它們全家都在這了。" 路漫漫其修遠兮,吾將上下而求索! github:https://gith ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...