/*
下面的代码演示了孤立用户的产生过程。在代码中,产生创建了一个测试数据库,
并且创建了两个登入aa和bb,bb拥有测试数据库中的对象,aa不拥有测试数据库中的对象,
建立好测试数据库并且备份后,从服务器中删除测试数据库和登入,用以模拟没有事先创建
登入的目标服务器,最后还原测试数据库的备份,演示孤立用户的产生过程。
*/
--创建一个测试数据库
create database tt
go
--创建两个登入
create login aa with password='12345q_1',DEFAulT_DATABASE =tt
create login bb with password='12345q_2',51); Font-family:Arial; Font-size:14px; line-height:26px">--设置登入的默认数据库为测试数据库tt
--授予登入访问数据库权限
use tt
create USER user1 FOR LOGIN aa
create USER user2 FOR LOGIN bb
CREATE SCHEMA scm_b AUTHORIZATION user2
--创建一个属于用户bb的表
create table scm_b.tb(ID int)
--至此,测试环境已经创建好了,使用用户aa或者bb登入,验证用户的可用性
--用户验证完成后,备份并删除测试数据库,演示孤立用户的产生过程
use master
backup database tt to disk = 'd:\tt.bak' with format
drop database tt
--删除登入,用以模拟目标服务器没有事先创建登入时的情况
DROP LOGIN aa
DROP LOGIN bb
--还原测试数据库
restore database tt from disk = 'd:\tt.bak'
--察看还原后的测试数据库用户
sp_helpuser
--可以看到用户aa,bb在还原后的数据库中确实存在,但使用aa或者bb登入时,会提示登入失败
--重新创建两个登入
use db
CREATE USER user1 FOR LOGIN aa
CREATE USER user2 FOR LOGIN bb
/*
消息 15023,级别 16,状态 1,第 1 行
用户、组或角色 'user1' 在当前数据库中已存在。
用户、组或角色 'user2' 在当前数据库中已存在。
--尝试删除测试数据库中的用户
DROP user user1
DROP user user2
消息 15138,级别 16,状态 1,第 1 行
数据库主体在该数据库中拥有 架构,无法删除。
--再次授予aa登入访问数据库权限
通过演示,可以知道,对于不拥有数据库中对象的用户,可以直接删除数据库中的孤立用户,
然后重新授予登入访问数据库的权限即可
对于拥有数据库对象的孤立用户,除非事先先除去该用户拥有的对象,否则无法删除。
可以通过系统存储过程sp_change_users_login来解决。sp_change_users_login,将数据库中现有的用户
映射到sql server登入
语法
sp_change_users_login [ @Action = ] 'action'
[,[ @UsernamePattern = ] 'user' ]
参数
[ @Action = ] 'action'
描述此过程要执行的 *** 作。action 的数据类型为 varchar(10),可以是下面的某个值。
值 描述
auto_Fix 将当前数据库的 sysusers 表中的用户条目链接到 syslogins 中同名的登录上。
Report 列出当前数据库中未链接到任何登录的用户及其对应的安全标识号 (SID)。
Update_One 将当前数据库中指定的 user 链接到 login。login 必须已经存在。必须指定 user 和 login。
[@UsernamePattern =] 'user'
是当前数据库中的 sql Server 用户的名称。user 的数据类型为 sysname,默认值为 NulL。sp_change_users_login 只能用于 sql Server 登录和用户的安全帐户;而不能用于 Microsoft windows NT? 用户。
[@Loginname =] 'login'
sql Server 登录的名称。login 的数据类型为 sysname,默认值为 NulL。
例如:对于孤立用户示例,在恢复数据库后,可以使用下面代码列出恢复的数据库中的孤立用户
sp_change_users_login 'report'
使用下列代码解决测试数据库中产生孤立用户bb,如果事先未建立登入bb,则sp_change_users_login自动
创建一个名为bb的登入,登入密码为bb,如果已经建立事先登入bb,则仅将测试数据库中的用户bb与sql server实例中的
登入建立联结
exec sp_change_users_login 'Update_One','user2','bb' 总结
以上是内存溢出为你收集整理的SQLServer 数据库还原中的孤立用户问题全部内容,希望文章能够帮你解决SQLServer 数据库还原中的孤立用户问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)