《锋利的SQL(第2版)》——2.5 架构管理

2.5 架构管理

锋利的SQL(第2版)
前面提过,架构是数据库中对象的容器,对于被集体管理的对象子集,通过架构可以简化操作。用户拥有架构和默认架构DBO,默认架构用于解析未使用其完全限定名称引用的对象的名称。这里的意思是,在访问默认架构中的对象时,不需要指定架构的名称。而对于非默认架构,则需要使用下面的格式进行访问,不过,微软建议你一直使用下面的两部分式对象名称。

架构名称.对象名称

2.5.1 创建架构

可以使用CREATE SCHEMA语句创建架构,语法格式如下所示。其中的schema_element部分允许使用CREATE TABLE、CREATE VIEW、GRANT、REVOKE和DENY语句来定义此架构包含的表和视图,并可对单个语句中的任何安全对象授予、撤销或拒绝授予权限。

CREATE SCHEMA schema_name_clause [ <schema_element> [ , ...n ] ]
<schema_name_clause> ::=
  {
    schema_name
  | AUTHORIZATION owner_name
  | schema_name AUTHORIZATION owner_name
  }
<schema_element> ::=
  {
    table_definition | view_definition | grant_statement
    revoke_statement | deny_statement
  }

schema_name

在数据库内标识架构的名称,最大长度是128个字符。

AUTHORIZATION owner_name

指定将拥有架构的数据库级主体的名称。此主体还可以拥有其他架构,并且可以不使用当前架构作为其默认架构。

table_definition

指定在架构内创建表的CREATE TABLE语句。

view_definition

指定在架构内创建视图的CREATE VIEW语句。

grant_statement

指定可对除新架构外的任何安全对象授予权限的GRANT语句。

revoke_statement

指定可对除新架构外的任何安全对象撤销权限的REVOKE语句。

deny_statement

指定可对除新架构外的任何安全对象拒绝授予权限的DENY语句。

例如,下面的语句将建立一个名为Employees的架构,所有者为dbo。

CREATE SCHEMA Employees AUTHORIZATION dbo

又如,下面的语句创建由Annik拥有的、包含表NineProngs的Sprockets架构。此语句向Mandar授予SELECT权限,而对Prasanna拒绝授予SELECT权限。

USE AdventureWorks2014;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
  CREATE TABLE NineProngs (source int, cost int, partnumber int)
  GRANT SELECT TO Mandar
  DENY SELECT TO Prasanna;
GO

2.5.2 修改架构

在创建一个架构后,可以根据需要使用GRANT、REVOKE、DENY语句对数据库用户进行授予、撤销授予、拒绝权限设置。虽然我们这本书是讲解SQL的,但是对于此操作,使用SQL Server Management Studio会更方便一些,步骤如下。

在对象资源管理器中,展开数据库引擎实例。
展开“数据库”节点,从中选择一个数据库并展开。
展开数据库的“安全性”节点后,继续展开“架构”节点,右键单击要修改的架构并选择“属性”,打开架构的属性窗口。
在架构的属性窗口的“常规”页面中,可以指定架构的名称和所有者。要查找一个有效的数据库级主体,可以单击“搜索”按钮。
可以在架构的属性窗口的“权限”页面中设置架构的权限,步骤如下。

在“权限”页面中单击“添加”按钮打开“选择用户或角色”对话框。
在“选择用户或角色”对话框的编辑框中输入要选择的用户或角色名称,并使用分号将名称分割开。如图2-3所示。
在添加完用户或角色后,可以为其指定详细的权限设置,如图2-4所示。

下面的语句把对架构HumanResources的INSERT权限授予Guest用户。

GRANT INSERT ON SCHEMA :: HumanResources TO guest;

下面的语句则是撤销Guest用户的INSERT权限。

REVOKE INSERT ON SCHEMA :: HumanResources TO guest;

2.5.3 移动对象到一个新架构中

在某些时候,可能需要移动对象到另一个容器中。但是,只能将对象在同一数据库之内的架构之间移动,在移动时,将会改变与对象相关联的命名空间。因此,也将改变对象的查询和访问方法。

将对象移入新架构时,将删除与该对象关联的全部权限。如果已显式设置对象所有者,则该所有者保持不变。移动对象应当使用ALTER SCHEMA语句,语法格式如下:

ALTER SCHEMA schema_name TRANSFER object_name;

schema_name

当前数据库中的架构名称,对象将移入其中。

object_name

要移入架构的对象名称。

下面的语句将表Address从架构Person移动到HumanResources架构中。

ALTER SCHEMA HumanResources TRANSFER Person.Address ;

2.5.4 删除架构

可以使用DROP SCHEMA语句删除架构。要删除的架构不能包含任何对象。例如,下面的语句将删除Employees架构:

DROP SCHEMA Employees ;

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2025-01-02 03:58:09

《锋利的SQL(第2版)》——2.5 架构管理的相关文章

《锋利的SQL(第2版)》——1.5 常量和变量

1.5 常量和变量 锋利的SQL(第2版) 常量和变量是程序设计过程中必不可少的元素,在前面的内容也涉及了对变量的简单介绍. 1.5.1 常量 常量,也称为文字值或标量值,是表示一个特定数据值的符号.常量的格式取决于它所表示的值的数据类型. 1.字符串常量 字符串常量包含在单引号内,可以由字母数字字符(a-z.A-Z和0-9)以及特殊字符(如!.@和#)组成.例如: '这是我的字符串常量' 如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号.对于嵌入在双引号中的字符串则没

《锋利的SQL(第2版)》——1.3 Transact-SQL语言的类型

1.3 Transact-SQL语言的类型 锋利的SQL(第2版) 在介绍了SQL的起源后,来看一下Transact-SQL包括哪些语言类型.首先,为了遵循ANSI SQL标准,Transact-SQL提供了数据定义语言(Data Definition Language,DDL)语句和数据操纵语言(Data Manipulation Language,DML)语句:其次,为了增强灵活性,Transact-SQL还提供了用于编程的流控制语句和其他语句. 对于语言类型,读者仅做大致了解就可以.在实际

《锋利的SQL(第2版)》——1.6 运算符

1.6 运算符 锋利的SQL(第2版) 运算符是一种符号,用来指定要在一个或多个表达式中执行的操作.SQL Server所使用的运算符可以分为算术运算符.赋值运算符.位运算符.比较运算符.逻辑运算符.字符串串联运算符和一元运算符,共7个类别. 1.6.1 算术运算符 算术运算符可以对两个表达式执行数学运算,这两个表达式可以是数值数据类型类别的任何数据类型.可用算术运算符如表1-5所示. 表1-5 算术运算符 加(+)和减(-)运算符也可用于对datetime和smalldatetime型值执行算

《锋利的SQL(第2版)》——1.2 SQL的理论基础

1.2 SQL的理论基础 锋利的SQL(第2版) E. F. Codd博士提出的关系数据库管理系统模型基于两个数学分支:集合理论和谓词逻辑.理解集合理论,对于构建数据库结构,减少数据冗余,保证数据一致性方面具有重要意义.所以,即使你是一个资深的DBA,也建议你重温本节内容. 1.2.1 集合理论 集合理论(集合论)是由数学家Georg Cantor创建的,这是一个基于关系模型的数学分支.Cantor的集合定义如下: 任意集合体M是我们感知或想到的,能够确定的互异对象m(称之为M的元素)的整体.

《锋利的SQL(第2版)》——1.7 常用函数

1.7 常用函数 锋利的SQL(第2版)为满足通常的程序设计需要,Transact-SQL语言提供了非常丰富的函数,包括聚合函数.配置函数.游标函数.日期和时间函数.数学函数等.本节将介绍一些常用的函数类型. 1.7.1 聚合函数 聚合函数对一组值执行计算并返回单个值.除了COUNT以外,聚合函数都会忽略空值.聚合函数经常与SELECT语句的GROUP BY子句一起使用.例如,下面的语句使用COUNT函数来获取Employee表中的员工数量. USE AdventureWorks2014; --

《锋利的SQL(第2版)》——1.8 查询工具

1.8 查询工具 锋利的SQL(第2版)在本章的前面介绍了SQL的语法规则.常量和变量.运算符.函数等基本知识,到底通过什么工具来执行SQL语句呢?对于程序开发人员来而言,可以从客户端应用程序发送SQL语句到服务器端执行.此外,出于服务器管理和SQL测试等需要,SQL Server也提供了Management Studio.sqlcmd.bcp和sqlps工具,可以通过它们执行SQL语句. 其中,bcp用于大量行插入SQL Server表,但该工具不需要具有Transact-SQL知识.sqlp

《锋利的SQL(第2版)》——2.2 创建数据库

2.2 创建数据库 锋利的SQL(第2版)在创建数据库之前,必须先确定数据库的名称.所有者.大小以及存储该数据库的文件和文件组.所谓所有者,即是创建数据库的用户.一般情况下,大多数产品对象由数据库所有者拥有. 在创建数据库之前,应注意下列事项. 要创建数据库,必须至少拥有CREATE DATABASE.CREATE ANY DATABASE或ALTER ANY DATABASE权限.创建数据库的用户将成为该数据库的所有者.对于一个SQL Server实例,最多可以创建32767个数据库.数据库名

《锋利的SQL(第2版)》——第1章 SQL简介

第1章 SQL简介 锋利的SQL(第2版)SQL的全称是结构化查询语言(Structured Query Language),是一种在关系数据库管理系统(Relational Database Management Systems,RDBMS)中查询和管理数据的标准语言.这是一种非常易读和易用的语言,只要稍微有一点英语基础,一些简单的数据查询.操作语句几乎都可以理解.但是,要想精通SQL,并不是一件很容易的事情,一是因为在数据处理方面有许许多多的个案,要处理好这些个案,除了具有缜密的逻辑思维,还

《锋利的SQL(第2版)》导读

前言 锋利的SQL(第2版)本书第1版是在4年前出版的,至今仍在被众多的SQL爱好者追捧,甚至有人不辞辛劳地逐页扫描,上传至网络进行分享.本书第1版是基于SQL Server 2008编写的,时光荏苒,目前SQL Server 2014已经发布,窗口函数等新功能不断丰富和发展,先前需要编写很复杂的代码才能完成的工作,现在寥寥几行就能把问题解决.无论是从代码可读性还是执行效率方面看,SQL Server 2014都值得我们去深入学习.因此,我们在第1版的基础上,对书的内容重新进行了补充和完善.此外