关于ms sql server的所有者及修改数据库对象的所有者
2010-03-08 23:32
405 查看
数据库所有者
dbo是具有在数据库中执行所有活动的暗示性权限的用户,将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上。另外,由固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。
如果用户 laone是固定服务器角色 sysadmin 的成员,并创建表 Table1,则表 Table属于 dbo,并以 dbo.Talble 而不是 laone.Table1 进行限定。相反,如果 laone不是固定服务器角色 sysadmin 的成员,而只是固定数据库角色 db_owner 的成员,并创建表 Table1,则 Table1属于 laone,并限定为 laone.Table1。
无法删除 dbo 用户,且此用户始终出现在每个数据库中。只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象:属于创建该对象的用户,而不是 dbo,用创建该对象的用户名限定。
如何修改数据库的所有者
更改当前数据库的所有者。
语法
sp_changedbowner [ @loginame = ] 'login'
[ , [ @map = ] remap_alias_flag ]
参数
[@loginame =] 'login'
当前数据库新所有者的登录 ID。login 为 sysname,没有默认值。login 必须是已存在的 SQL Server 登录或 Windows 用户。如果 login 通过当前数据库内的现有别名或用户安全帐户已拥有访问该数据库的权限,则不能成为该数据库的所有者。为了避免这种情况,应先除去当前数据库中的别名或用户。
[@map =] remap_alias_flag
值为 true 或 false,表示旧数据库所有者 (dbo) 的现有别名是映射到当前数据库的新所有者还是要除去。remap_alias_flag 的数据类型为 varchar(5),默认值为 NULL,表示旧 dbo 的任何现有别名均映射到当前数据库的新所有者。false 表示除去旧数据库所有者的现有别名。
返回代码值
0(成功)或 1(失败)
注释
执行 sp_changedbowner 之后,新所有者称为数据库中的 dbo 用户。dbo 拥有执行数据库中所有活动的暗示性权限。
不能更改 master、model 或 tempdb 系统数据库的所有者。
若要显示有效 login 值的列表,请执行 sp_helplogins 存储过程。
执行只有 login 参数的 sp_changedbowner 会将数据库所有权改为 login,并将先前别名为 dbo 的用户别名映射到新数据库所有者。
权限
只有 sysadmin 固定服务器角色的成员可以执行 sp_changedbowner。
示例
下面的示例使用户 Albert 成为当前数据库的所有者,并将旧数据库所有者的现有别名映射到 Albert。
EXEC sp_changedbowner 'Albert'
dbo是具有在数据库中执行所有活动的暗示性权限的用户,将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上。另外,由固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。
如果用户 laone是固定服务器角色 sysadmin 的成员,并创建表 Table1,则表 Table属于 dbo,并以 dbo.Talble 而不是 laone.Table1 进行限定。相反,如果 laone不是固定服务器角色 sysadmin 的成员,而只是固定数据库角色 db_owner 的成员,并创建表 Table1,则 Table1属于 laone,并限定为 laone.Table1。
无法删除 dbo 用户,且此用户始终出现在每个数据库中。只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象:属于创建该对象的用户,而不是 dbo,用创建该对象的用户名限定。
如何修改数据库的所有者
更改当前数据库的所有者。
语法
sp_changedbowner [ @loginame = ] 'login'
[ , [ @map = ] remap_alias_flag ]
参数
[@loginame =] 'login'
当前数据库新所有者的登录 ID。login 为 sysname,没有默认值。login 必须是已存在的 SQL Server 登录或 Windows 用户。如果 login 通过当前数据库内的现有别名或用户安全帐户已拥有访问该数据库的权限,则不能成为该数据库的所有者。为了避免这种情况,应先除去当前数据库中的别名或用户。
[@map =] remap_alias_flag
值为 true 或 false,表示旧数据库所有者 (dbo) 的现有别名是映射到当前数据库的新所有者还是要除去。remap_alias_flag 的数据类型为 varchar(5),默认值为 NULL,表示旧 dbo 的任何现有别名均映射到当前数据库的新所有者。false 表示除去旧数据库所有者的现有别名。
返回代码值
0(成功)或 1(失败)
注释
执行 sp_changedbowner 之后,新所有者称为数据库中的 dbo 用户。dbo 拥有执行数据库中所有活动的暗示性权限。
不能更改 master、model 或 tempdb 系统数据库的所有者。
若要显示有效 login 值的列表,请执行 sp_helplogins 存储过程。
执行只有 login 参数的 sp_changedbowner 会将数据库所有权改为 login,并将先前别名为 dbo 的用户别名映射到新数据库所有者。
权限
只有 sysadmin 固定服务器角色的成员可以执行 sp_changedbowner。
示例
下面的示例使用户 Albert 成为当前数据库的所有者,并将旧数据库所有者的现有别名映射到 Albert。
EXEC sp_changedbowner 'Albert'
相关文章推荐
- 关于MS SQL Server数据库文件
- 转帖:MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- MS SQL Server存储过程批量修改用户表所有者
- MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKDB通过执行下列操作检查指定数据库中所有对象的逻辑和物理完整性
- JPA中关于MS SQL Server数据库的TimeStamp数据类型如何映射
- 转摘--MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- MS SQL Server存储过程批量修改用户表所有者
- SQL 2008 提示:“此数据库没有有效所有者,因此无法安装数据库关系图支持对象”
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCONSTRAINTS检查当前数据库中指定表上的指定约束或所有约束的完整性
- 如何看MS SQLSERVER数据库的执行计划
- 数据库各厂商发展历史(6. MS SQL Server, PostgreSQL及其它)
- MS SQL Server 2008 master数据库损坏故障解决
- ----------------MS SQL SERVER数据库置疑后恢复步骤 --------------SQL Server安装挂起-------------
- 《MS SQL Server 2000管理员手册》系列——33. 还原及回复数据库
- MS SQL Server数据库修复利器—D-Recovery For MS SQL Server数据恢复软件
- 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
- MS-sql 2005拒绝了对对象 'xxx' (数据库 'xxx',架构 'dbo')的 SELECT 权限的解决方法
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC DBREINDEX对指定数据库中的表重新生成一个或多个索引