指定db_owner

ZDNet软件频道 时间:2003-12-12 作者:ZDNet China |  我要评论()
本文关键词:db_owner 数据库 db
当恢复或者创建数据库时,你是否注意到数据库所有者是你的NT身份验证名。让我们来看看如何将数据库的所有者改为一个像系统管理员之类的用户时仍然保持数据库的一致性。
本文译自Builder.com,未经许可请勿转载

当恢复或者创建数据库时,你是否注意到数据库所有者是你的NT身份验证名。为了保证数据库的一致性,你要将数据库的所有者改为一个像系统管理员之类的用户,你可能就会考虑使用系统过程:sp_changedbowner。你或许还会考虑写一个脚本来禁用所有的用户数据库然后将他们重新分配给数据库所有者SA。

系统过程sp_changedbowner带一个参数@map,如果不写这个参数的话,执行中将使用缺省值null,并且会将老的数据库所有者的别名重新映射到新的数据库所有者SA。

下面我们给出一个示范,首先创建一个数据库,该数据库应尽量能跟范例数据库一样小,然后运行命令sp_helpuser,这样就得到一个新创建的用户的列表。

CREATE DATABASE test
GO
USE test
GO
EXEC sp_helpuser
GO

这将会把你登录到SQL Server的用户作为数据库所有者(db_owner)列出来。如果使用Windows NT身份验证,将会有一个NULL的LoginName和一个SID值。

下面让我们添加两个login,ISUser1和ISUser2。指定ISUser1为db_owner的一个别名。同样地也把数据库所有者改为SA。

EXEC sp_addlogin @loginame = 'ISUser1', @passwd = 'ISUser1', @defdb = 'master'
EXEC sp_addlogin @loginame = 'ISUser2', @passwd = 'ISUser2', @defdb = 'master'
EXEC sp_addalias @loginame = 'ISUser1', @name_in_db = 'dbo'

EXEC sp_changedbowner @loginame = 'sa', @map = 'TRUE'

EXEC sp_helpuser

输出将会显示SA为db_owner,ISUser1为一个作为指向db_owner的别名的用户。

现在我们将使用sp_changedbowner指定ISUser2为新的数据库所有者。我们将使用@map参数,将其赋一个假值,结果将会删除作为别名的用户。

EXEC sp_changedbowner @loginame = 'ISUser2', @map = 'FALSE'

EXEC sp_helpuser
GO

输出将显示ISUser2现在是新的数据库所有者,ISUser1已经被删除。下一步,我们需要删除测试数据库清除这个示例。

USE master
GO
DROP DATABASE test
GO



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134