5 . 4 . 3 架构

5 . 4 . 3 架构

大家好,又见面了,我是你们的朋友全栈君。

5 . 4 . 3 架构
SQL Server 2008按 ANSI标准中的定义实现了数据库架构。SQL Server 2008中几乎每个对 
象都存在于一个已定义的架构中。架构只是一种组织数据库对象并为它所包含的对象指派权限 
的方法。架构本身可为任意数据库主体(包括数据库角色和应用程序角色)所有,同时包含多个 
由不同用户拥冇的对象。在架构中,对象的名称不能重复。然而,如果它们存在于不同的架构 
中,那么可以有相同的名称。例如,如果在服务器AughtEight上的Sales架构中创建了一个名 
为 Inventory的表,这个表名称就变成AughtEight.Sales.lnventory。在 Marketing染构中可以创建 另一个名为Inventory的表,它的名称则是AughtEight.Marketing.Inventory。尽管这是可行的, 
但我认为这并不是个好主意,因为这会使不熟悉该数据库的用户感到困惑,在以后也可能生成 
意外的查询结果。架构真正的强大之处在于它构成了 一个安全作用域,数据库管理员可以使用 
这个安全作用域来控制对架构中的所有对象的访问。第6 章对此有详细介绍。
在 SQL Server 2008中,数据库主体被赋予一个架构的所有权,而该架构又拥有表、视 图、存储过程和函数等组成对象。如果需要删除拥有某个架构的用户,那么必须首先把该 
架构的所有权赋予另一个用户。最简单的解决方案就是使dbo用户拥有所有架构。dbo用 户是一个内置用户,映射至固定服务器角色sysadmin的任意成员。dbo用户总是存在,且 不能被删除,因此它是架构所有权的最理想候选人。要了解有关dbo用户、固定服务器角 
色和SQL Server 2008安全性的更多信息,请参阅第6 章。

1. 架构和名称解析
由于架构只是对象容器,因此在SQL Server 2008中引用数据库对象时,设定对象引用 的上下文是很重要的。每个用户都被指派一个默认的架构。当他们登录到SQL Server并引 用数据库对象时,这个默认架构将在该对象的引用方式中发挥独特的作用。
例如,假设在AdventureWorks2008数据库中创建了一个名为FredF的用户,并把默认 
架构Sales指派给他。如果FredF登录并执行SELECT* FROM CreditCard査询,由于其默 认染构是 Sales,CreditCard 表将被解析为 Adventureworks2008.Sales.CreditCard。 由于 
Sales.CreditCard表存在,因此查询将返回该表的内容。
如果 FredF 执行 SELECT * FROM Person 查询,Person 表将被解析为 Adventureworks2008. 
Salesperson,这是一个并不存在的表。由于SQL Server在 FredF的默认架构中找不到Person 表,它将默认去dbo架构中寻找AdventureWorks2008.dbo.Person表,同样这也不会成功。 
此时,SQL Server就会返回错误“无效的对象名称”。
2. 创建架构
要创建架构,唯一需要的信息就是架构的名称。架构所有权默认属于运行创建脚本的 
用户,但可以把任何有效的数据库用户指定为所有者。最简单的方法就是将dbo指定为架 构所有者,但在有些情况下,把一个锌通用户指定为所有者比较合适。CREATE SCHEMA 
语句的语法和例子如下所示:
CREATE SCHEMA Schema_Name [ AUTHORIZATION owner ]
USE AdventureWorks2008 GO
CREATE SCHEMA Operations AUTHORIZATION dbo
该 CREATE SCHEMA语句之后的任何架构作用域的语句都将位于刚才创建的架构的 
作用域内,如下例所示:
USE AdventureWorks2008 GO
CREATE SCHEMA Operations AUTHORIZATION dbo
CREATE TABLE DeliveryDriver (DriverlD int IDENTITY NOT NULL ,LName varchar(75) NOT NULL 
, FName v a rc h a r(75) NOT NULL)
GRANT SELECT ON DeliveryDriver TO FredF
虽 然 在 CREATE TABLE语句中没有指定架构,此 脚本仍将DeliveryDriver表放入 
Operations架构中。甚至GRANT SELECT语句也会成功,尽管在该语句中未指派架构,它 默认使用Operations架构,因为CREATE SCHEMA语句为批处理中的其余语句设定了该 架构的作用域。如果对脚本稍做改变,使 GRANT SELECT语句处于另一个批处理中,那 
么 GRANT SELECT就会运行失败。

 

CREATE SCHEMA Operations AUTHORIZATION dbo CREATE TABLE DeliveryDriver (DriverlD int IDENTITY NOT NULL ,LName varchar(75) NOT NULL ,FName varchar(75) NOT NULL)
GO
GRANT SELECT ON DeliveryDriver TO FredF
Msg 15151, Level 16, State 1, Line 1 Cannot find the object 1 DeliveryDriver’, because it does not exist or you do not have permission.
GO关键字将GRANT SELECT语句放在创建架构的批处理之外,这样执行上下文就
变成执行脚本的用户上下文。作为最佳实践,应该总是指定对象的架构以避免不可预料的
结果。
CREATE SCHEMA Operations AUTHORIZATION dbo CREATE TABLE Operations.DeliveryDriver (DriverlD int IDENTITY NOT NULL ,LName varchar(75) NOT NULL ,FName varchar(75) NOT NULL) GRANT SELECT ON Operations.DeliveryDriver TO FredF
记住,架构作用域解析总是起始于用户的默汄架构,如果一个被引用的对象不是作用
域限定的,解析将返回到dbo架构。

3 .架构维护
如果试图删除一个包含对象的架构,将产生如下例所示的错误:
DROP SCHEMA Operations
Msg 3729, Level 16, State 1, Line 1 Cannot drop schema ‘Operations * because it is being referenced by object *DeliveryDriver*.
如果仍然需要该架构中的对象,可以使用ALTER SCHEMA语句把它转移到另一个架
构中。
ALTER SCHEMA Production TRANSFER Operations.DeliveryDriver
这个例子把表DeliveryDriver从 Operations架构转移到Production架构中。因为这是架
构中仅剩的对象,所以现在可以删除架构。但是要注意,将一个对象从一个架构移动到另
一架构会清除在该对象上设定的任何权限。
不能从数据库中删除拥有架构的对象,这就是为什么让dbo用户拥有所有架构的原因

之一。要想改变一个架构的所有权,需要改变该架构的AUTHORIZATION属性。下面的
例子将Operations架构的所有权改授予FredF:
ALTER AUTHORIZATION ON SCHEMA::Operations TO FredF

转载于:https://www.cnblogs.com/zhouwansheng/p/9313518.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107417.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 网络综合布线工程后期验收

    网络综合布线工程后期验收

  • glusterfs分布式文件存储搭建和使用[通俗易懂]

    glusterfs分布式文件存储搭建和使用[通俗易懂]Glusterfs简介GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。说起glusterfs可能比较陌生,可能大家更多的听说和使用的是NFS,GFS,HDFS之类的,这之中的NFS应该是使用最为广泛的,简单易于管理,但是NFS以及后边会说到..

  • SAP WebIDE的本地安装方式「建议收藏」

    SAP WebIDE的本地安装方式「建议收藏」#CreatedbyJerryWang,lastmodifiedonJun02,20151.https://store.sap.com/下载安装文件:![clipboard1](https://user-images.githubusercontent.com/5669954/27470901-38a99006-57f6-11e7-8c0e-57f5cbf86e…

    2022年10月18日
  • msfconsole模块_msfconsole下载

    msfconsole模块_msfconsole下载Msfconsole提供了一个一体化的集中控制台。通过msfconsole,你可以访问和使用所有的metasploit的插件,payload,利用模块,post模块等等。Msfconsole还有第三方程序的接口,比如nmap,sqlmap等,可以直接在msfconsole里面使用。在启动MSF终端之后,可以首先输入help命令列出MSF终端所支持的命令列表,包括核心命令集和后端数据库命令集。对于其中的大部分命令,你可以输入help[COMMAND],进一步查看该命令的使用帮助信息。一、Msfconso

  • 最典型的因果图_因果关系分析图制作

    最典型的因果图_因果关系分析图制作文章目录1dowhy介绍1.1dowhy的分析流程2案例2.1数据获取与整理2.2如何简单证明变量之间的因果关系2.3步骤一:因果图建模2.4步骤二:识别2.5步骤三:估计因果效应2.6反驳结果2.7与普通ML分类模型比较特征重要性1dowhy介绍github地址:microsoft/dowhydowhy文档:DoWhy|Anend-to-endlibraryforcausalinference1.1dowhy的分析流程参考材料:因果推断框架DoWh

  • 程序员不成熟的若干个特征

    程序员不成熟的若干个特征人成熟与不成熟跟年龄没有关系,人成熟不成熟,就是你能不能站在对方的角度去看待事物。就是能不能把我的世界变成你的世界。这个社会有很多的成年人,还没有脱离幼稚的行为。一点小事情就跟别人争来争去。人不成熟的第一个特征——就是立即要回报他不懂得只有春天播种,秋天才会收获。很多人在做任何事情的时候,刚刚付出一点点,马上就要得到回报。(学钢琴,学英语等等,刚开始就觉得难,发现不行,立即就要放弃。)做我们这个项目也是一样,很多人来做这个生意,开始没有什么成绩,就想着要放弃,有的人一个月放弃,有的人三个月放弃,有的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号