CREATE SCHEMA 有什么用处

pojia 2008-03-07 02:36:27
SCHEMA 有什么用处
...全文
237 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pojia 2008-03-07
  • 打赏
  • 举报
回复
怎么访问???

select * from Sprockets.NineProngs

select * from dbo.NineProngs

select * from NineProngs
sxc1001 2008-03-07
  • 打赏
  • 举报
回复

在当前数据库中创建架构。CREATE SCHEMA 事务还可以在新架构内创建表和视图,并可对这些对象设置 GRANT、DENY 或 REVOKE 权限。

Transact-SQL 语法约定

语法

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
}


备注
注意:
允许包含 CREATE SCHEMA AUTHORIZATION 但不指定名称的语句存在,目的只是为了向后兼容。



CREATE SCHEMA 可以创建架构以及此架构包含的表和视图,并可对单个语句中的任何安全对象授予、撤消或拒绝授予权限。此语句必须作为单独的批处理执行。

CREATE SCHEMA 事务是原子级的。如果在 CREATE SCHEMA 语句执行期间出现任何错误,则不创建指定的任何安全对象,也不授予任何权限。

由 CREATE SCHEMA 创建的安全对象可以任何顺序列出,但引用其他视图的视图除外。在这种情况下,被引用的视图必须在引用它的视图之前创建。

因此,GRANT 语句可以在创建某个对象之前对该对象授予权限,CREATE VIEW 语句也可以出现在创建该视图所引用表的 CREATE TABLE 语句之前。同样,CREATE TABLE 语句中声明的外键可以指向后面指定的表。例外情况是,如果一个视图的选择语句引用另一个视图,则必须在指定引用视图之前指定被引用的视图。

由 CREATE SCHEMA 语法创建的对象将在正创建的架构内创建。

注意:
在 SQL Server 2005 中,CREATE SCHEMA 语句中支持 DENY 和 REVOKE。DENY 和 REVOKE 子句将按照它们在 CREATE SCHEMA 语句中出现的顺序执行。



可将不同的数据库主体指定为正在创建的架构的所有者。但是,如本主题中后面的“权限”部分所述,还需满足其他权限要求。

新架构由以下数据库级别主体之一拥有:数据库用户、数据库角色或应用程序角色。在架构内创建的对象由架构所有者拥有,这些对象在 sys.objects 中的 principal_id 为空。架构所包含对象的所有权可转让给任何数据库级别主体,但架构所有者始终保留对此架构内对象的 CONTROL 权限。

不推荐使用的声明
支持不指定架构名称的 CREATE SCHEMA 语句,目的只为了向后兼容。在 SQL Server 的未来版本中将删除此功能。此类语句并不在数据库中实际创建架构,但它们会创建表和视图,并授予权限。主体不需要 CREATE SCHEMA 权限来执行这一早期格式的 CREATE SCHEMA,因为不会创建任何架构。

参数
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 语句。

权限
需要对数据库具有 CREATE SCHEMA 权限。

若要创建在 CREATE SCHEMA 语句中指定的对象,用户必须具有相应的 CREATE 权限。

若要指定其他用户作为所创建架构的所有者,则调用方必须具有对此用户的 IMPERSONATE 权限。如果将数据库角色指定为所有者,则调用方必须具有下列资格之一:角色的成员身份或对此角色的 ALTER 权限。

注意:
对于向后兼容的语法,将不针对 CREATE SCHEMA 检查任何权限,因为不创建任何架构。



示例
以下示例将创建由 Annik 拥有的、包含表 NineProngs 的 Sprockets 架构。此语句向 Mandar 授予 SELECT 权限,而对 Prasanna 拒绝授予 SELECT 权限。请注意,Sprockets 和 NineProngs 在一个语句中创建。

复制代码
USE AdventureWorks;
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT TO Mandar
DENY SELECT TO Prasanna;
GO

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧