在服务器Z111中有两个登录名(sa,sq_zhideng),有个数据库名为sq_zhideng,sq_zhideng数据库所有者为sq_zhideng,在sq_zhideng数据库中的所有表的所有者都为dbo,现在想把所有的表的所有者改为sq_zhideng,请问大家怎么改?查看sq_zhideng登录名的属性的用户映射中,映射到sq_zhideng登录名的sq_zhideng数据库的用户是显示的是dbo(但我查看sq_zhideng数据库的所有者确实sq_zhideng)我希望的是把所有的表的所有者改为sq_zhideng希望大家帮忙!我弄了很久都没弄好!谢谢

解决方案 »

  1.   

    dbo是默认的。
    dbo 是具有在数据库中执行所有活动的暗示性权限的用户。将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上。另外,由固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。例如,如果用户 Andrew 是固定服务器角色 sysadmin 的成员,并创建表 T1,则表 T1 属于 dbo,并以 dbo.T1 而不是 Andrew.T1 进行限定。相反,如果 Andrew 不是固定服务器角色 sysadmin 的成员,而只是固定数据库角色 db_owner 的成员,并创建表 T1,则 T1 属于 Andrew,并限定为 Andrew.T1。该表属于 Andrew,因为该成员没有将表限定为 dbo.T1。无法删除 dbo 用户,且此用户始终出现在每个数据库中。只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象:属于创建该对象的用户,而不是 dbo。
    用创建该对象的用户名限定。
      

  2.   

    --执行这个语句,就可以把当前库的所有表的所有者改为dbo
    exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''
      

  3.   

    如何修改数据库的所有者更改当前数据库的所有者。语法
    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'
      

  4.   

    我怎么在当前库下新建不了sq_zhideng这个用户,Z111服务器有个sq_zhideng的登录名