SQLServer之修改数据库架构

修改数据库架构注意事项

用户与架构完全分离。

ALTER SCHEMA 仅可用于在同一数据库中的架构之间移动安全对象。 若要更改或删除架构中的安全对象,请使用特定于该安全对象的 ALTER 或 DROP 语句。

如果对 securable_name 使用了由一部分组成的名称,则将使用当前生效的名称解析规则查找该安全对象。

将安全对象移入新架构时,将删除与该安全对象关联的全部权限。 如果已显式设置安全对象的所有者,则该所有者保持不变。 如果安全对象的所有者已设置为 SCHEMA OWNER,则该所有者将保持为 SCHEMA OWNER;但移动之后,SCHEMA OWNER 将解析为新架构的所有者。 新所有者的 principal_id 将为 NULL。

无论是 sys.sql_modules 目录视图的 definition 列中的相应对象,还是使用 OBJECT_DEFINITION 内置函数获取的相应对象,移动存储过程、函数、视图或触发器都不会更改其架构名称(如有)。 因此,我们建议不要使用 ALTER SCHEMA 移动这些对象类型。 而是删除对象,然后在新架构中重新创建该对象。

移动表或同义词不会自动更新对该对象的引用。 必须手动修改引用已移动对象的任何对象。 例如,如果移动了某个表,并且触发器中引用了该表,则必须修改触发器以反映新的架构名称。 请使用 sys.sql_expression_dependencies 列出该对象上的依赖关系,然后再进行移动。

若要通过使用 SQL Server Management Studio 更改表的架构,请在对象资源管理器中右键单击该表,然后单击“设计”。 按 F4 以打开“属性”窗口。 在“架构”框中,选择新架构。

若要从另一个架构中传输安全对象,当前用户必须拥有对该安全对象(非架构)的 CONTROL 权限,并拥有对目标架构的 ALTER 权限。

如果已为安全对象指定 EXECUTE AS OWNER,且所有者已设置为 SCHEMA OWNER,则用户还必须拥有对目标架构所有者的 IMPERSONATE 权限。

在移动安全对象后,将删除与所传输的安全对象相关联的所有权限。

使用SSMS数据库管理工具修改架构

1、连接服务器-》展开数据库文件夹-》选择数据库并展开-》展开安全性文件夹-》展开架构文件夹-》选择要修改的架构右键点击属性。

2、在架构属性弹出框-》点击常规-》点击搜索修改架构所有者。

3、在架构属性弹出框-》点击权限-》点击搜索选择用户或角色-》选择用户或角色权限。

4、在架构属性弹出框-》点击扩展属性-》新增或者删除扩展属性。

使用T-SQL脚本修改数据库架构

语法

--声明数据库引用
use database_name;
go

修改用户或者角色
alter authorization on schema::[ArchitectureName] to [schemaOwner];
go

--修改用户或角色权限
--授予插入
grant insert on schema::[ArchitectureName] to [rolename_username];
go

--授予查看定义
grant view definition on schema::[ArchitectureName] to [rolename_username];
go

--授予查看更改跟踪
grant view change tracking on schema::[ArchitectureName] to [rolename_username];
go

--授予创建序列
grant create sequence on schema::[ArchitectureName] to [rolename_username];
go

--授予更改
grant alter on schema::[ArchitectureName] to [rolename_username];
go

 --授予更新
grant update on schema::[ArchitectureName] to [rolename_username];
go

--接管所有权
grant take ownership on schema::[ArchitectureName] to [rolename_username];
go

--授予控制
grant control on schema::[ArchitectureName] to [rolename_username];
go

--授予删除
grant delete on schema::[ArchitectureName] to [rolename_username];
go

--授予选择
grant select on schema::[ArchitectureName] to [rolename_username];
go

--授予引用
grant references on schema::[ArchitectureName] to [rolename_username];
go

--授予执行
grant execute on schema::[ArchitectureName] to [rolename_username];
go

--授予并允许转授插入
grant insert on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授查看定义
grant view definition on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授查看更改跟踪
grant view change tracking on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授创建序列
grant create sequence on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授更改
grant alter on schema::[ArchitectureName] to [rolename_username] with grant option;
go

 --授予并允许转授更新
grant update on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--接管并允许转授所有权
grant take ownership on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授控制
grant control on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授删除
grant delete on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授选择
grant select on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授引用
grant references on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--授予并允许转授执行
grant execute on schema::[ArchitectureName] to [rolename_username] with grant option;
go

--拒绝插入
deny insert on schema::[ArchitectureName] to [rolename_username];
go

--拒绝查看定义
deny view definition on schema::[ArchitectureName] to [rolename_username];
go

--拒绝查看更改跟踪
deny view change tracking on schema::[ArchitectureName] to [rolename_username];
go

--拒绝创建序列
deny create sequence on schema::[ArchitectureName] to [rolename_username];
go

--拒绝更改
deny alter on schema::[ArchitectureName] to [rolename_username];
go

--拒绝更新
deny update on schema::[ArchitectureName] to [rolename_username];
go

--拒绝所有权
deny take ownership on schema::[ArchitectureName] to [rolename_username];
go

--拒绝控制
deny control on schema::[ArchitectureName] to [rolename_username];
go

--拒绝删除
deny delete on schema::[ArchitectureName] to [rolename_username];
go

--拒绝选择
deny select on schema::[ArchitectureName] to [rolename_username];
go

--拒绝引用
deny references on schema::[ArchitectureName] to [rolename_username];
go

--拒绝执行
deny execute on schema::[ArchitectureName] to [rolename_username];
go

删除数据库架构扩展属性
exec sys.sp_dropextendedproperty @name=N‘extendedAttributeName‘,@level0type=N‘schema‘,@level0name=N‘extendedAttributeValue‘
go

创建数据库架构扩属性
exec sys.sp_addextendedproperty @name=N‘newExtendedAttributeName‘,@value=N‘newExtendedAttributeValue‘ , @level0type=N‘schema‘,@level0name=N‘ArchitectureName‘
go

--修改数据库架构
alter schema schema_name(你要修改成得新架构)
transfer { object | type | xml schema collection } securable_name (原架构名.对象名);
go   

语法解析

--语法解析
--schema_name
--当前数据库中的架构名称,安全对象将移入其中。其数据类型不能为sys或information_schema。

--ArchitectureName
--架构名称

--schemaOwner
--架构所有者

--rolename_username
--用户或角色

--extendedAttributeName
--要删除的扩展属性名称

--extendedAttributeValue
--要删除的扩展属性值

--newExtendedAttributeName
--新添加扩展属性名称

--newExtendedAttributeValue
--新添加的扩展属性值

--transfer { object | type | xml schema collection }
--更改其所有者的实体的类。object是默认值。

--securable_name
--要移入架构中的架构范围内的安全对象的一部分或两部分名称。

示例

--声明数据库引用
use [testss];
go						   

--修改数据库架构
--修改架构所有者
alter authorization on schema::[testarchitecture] to [db_datareader];
go

--修改用户或角色权限
--授予插入
grant insert on schema::[testarchitecture] to [guest];
go

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

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

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

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

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

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

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

--授予删除
grant delete on schema::[testarchitecture] to [guest];
go

--授予选择
grant select on schema::[testarchitecture] to [guest];
go

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

--授予执行
grant execute on schema::[testarchitecture] to [guest];
go

----授予并允许转授插入
--grant insert on schema::[testarchitecture] to [[guest]] with grant option;
--go

----授予并允许转授查看定义
--grant view definition on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授查看更改跟踪
--grant view change tracking on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授创建序列
--grant create sequence on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授更改
--grant alter on schema::[testarchitecture] to [guest] with grant option;
--go

-- --授予并允许转授更新
--grant update on schema::[testarchitecture] to [guest] with grant option;
--go

----接管并允许转授所有权
--grant take ownership on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授控制
--grant control on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授删除
--grant delete on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授选择
--grant select on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授引用
--grant references on schema::[testarchitecture] to [guest] with grant option;
--go

----授予并允许转授执行
--grant execute on schema::[testarchitecture] to [guest] with grant option;
--go

----拒绝插入
--deny insert on schema::[testarchitecture] to [guest];
--go

----拒绝查看定义
--deny view definition on schema::[testarchitecture] to [guest];
--go

----拒绝查看更改跟踪
--deny view change tracking on schema::[testarchitecture] to [guest];
--go

----拒绝创建序列
--deny create sequence on schema::[testarchitecture] to [guest];
--go

----拒绝更改
--deny alter on schema::[testarchitecture] to [guest];
--go

----拒绝更新
--deny update on schema::[testarchitecture] to [guest];
--go

----拒绝所有权
--deny take ownership on schema::[testarchitecture] to [guest];
--go

----拒绝控制
--deny control on schema::[testarchitecture] to [guest];
--go

----拒绝删除
--deny delete on schema::[testarchitecture] to [guest];
--go

----拒绝选择
--deny select on schema::[testarchitecture] to [guest];
--go

----拒绝引用
--deny references on schema::[testarchitecture] to [guest];
--go

----拒绝执行
--deny execute on schema::[testarchitecture] to [guest];
--go

--删除数据库架构扩展属性
exec sys.sp_dropextendedproperty @name=N‘testcrituer‘ , @level0type=N‘schema‘,@level0name=N‘testarchitecture‘
go

--创建数据库架构扩属性
exec sys.sp_addextendedproperty @name=N‘testcrituer‘, @value=N‘测试创建数据库架构‘ , @level0type=N‘schema‘,@level0name=N‘testarchitecture‘
go

--修改架构下对象所有权,从[testarchitecture]转移到[dbo]
alter schema [dbo] transfer [testarchitecture].[schema_table1];
go

示例结果:执行T-SQL脚本需要刷新表文件夹才能查看执行结果。

原文地址:https://www.cnblogs.com/vuenote/p/10307204.html

时间: 2024-08-08 22:23:16

SQLServer之修改数据库架构的相关文章

SQL 修改数据库架构名

SQl 修改数据库架构名 declare @name sysname declare csr1 cursor for select TABLE_NAME from INFORMATION_SCHEMA.TABLES open csr1 FETCH NEXT FROM csr1 INTO @name while (@@FETCH_STATUS=0) BEGIN SET @name='cqgcfccn.' + @name print 'ALTER SCHEMA dbo TRANSFER ' + @n

SQLserver2012 修改数据库架构

还原数据库以后,发现有一张表的架构不对,执行sql提示:对象名无效.

sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”

当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项.如果要去掉此提示,可从“工具”菜单中选择“选项”,在“选项”对话框中,选Designers,选择“表设计器和数据库设计器”,清除“ 阻止保存要求重新创建表的更改”复选框. 转载请注明出处:http://www.cnb

创建和修改数据库的架构名

--创建架构名: CREATE SCHEMA [架构名] --修改数据库表架构名 ALTER SCHEMA [新架构名] TRANSFER [旧的架构名].[对象名] 创建和修改数据库的架构名,码迷,mamicode.com

解剖SQLSERVER 第一篇 数据库恢复软件商的黑幕

解剖SQLSERVER 第一篇  数据库恢复软件商的黑幕 这一系列,我们一起来解剖SQLSERVER 在系列的第一篇文章里本人可能会得罪某些人,但是作为一位SQLSERVER MVP,在我的MVP任期内希望可以对大家作出一些贡献 在第一篇里面涉及到某些内容可能不会以详细的方式给出截图并且和大家讲解,毕竟第一篇的篇幅比较长,希望大家见谅.. 在第一篇文章开始之前,先说三个题外话 第一个题外话  更新丢失 首先要做的事情是,跟大家道歉 在之前<SQLSERVER走起>的微信公众帐号里推送了一篇文章

sqlserver 标准系统数据库

SQL server系统数据库很重要,大部分时候都不应该修改他们.唯一例外的是model数据库和tempdb数据库.model数据库允许部署更改到任何新创建的数据库(如存储过程),而更改tempdb数据库则是为了帮助扩展数据库以承担更多的负载. 1.Resource数据库 Resource数据库从SQL server 2005引进.它包含了SQL server运行所需的所有的只读的关键系统表.元数据以及存储过程.它不包含任何用户实例或数据库的任何信息,它只在安装新服务补丁时被写入.Resourc

Sql语句在SqlServer中创建数据库、表格并添加约束

通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: 1 -- 使用master数据库 2 use master 3 -- 创建数据库 4 create datebase [架构名.]数据库名 5 on [primary]--主文件数据描述 6 ( 7 name = '数据库逻辑名', --一般是数据库的名称 8 filename = '数据文件的名字',--全路径 9 size = 12mb, --数据文件

mysql数据库修改数据库编码,字段编码与表编码(转)

最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat )查看一下表category的结构发现 KIGG 数据库的默认情况是用latin1编码的(DEFAULT CHARSET=latin1), 如下: CREATE TABLE `category` ( `Id` binary(16) NOT NULL, `UniqueName` varchar(64) NOT NULL, `Name` varchar(64) NOT NULL, `Created

数据库架构的演变

 如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 最近看了很多公司架构的演变的文章,发现其中的基本思路和架构演变都很类似,这里也总结一下数据库架构的演变以及演变背后的思路. 单主机 最开始网站一般都是由典型的LAMP架构演变而来的,一般都是一台linux主机,一台apache服务器,php执行环境以及mysql服务器,一般情况下,这些都在一台虚拟主机上,简称单主机模式. 单主机模式缺点: 1 web服务器和mysql服务器公用一台主机