在本地数库中重新创一样的用户user1和储存过程A_prostore后,并给了exec权限后,用该用户user1居然无法调用A_prostore,在查询分析器和IIS网页中都不行?谁能指点下,最主要是这个问题。
9 个解决方案
#1
因為你沒有還原master數據庫。
最好是刪除原來的用戶,重新建立一個和原來一樣的新用戶。
最好是刪除原來的用戶,重新建立一個和原來一樣的新用戶。
#2
刚复习到这个问题
关注一下sp_change_users_login存储过程,如果你不还原master数据库的话;
应该有两个参数 auto_fix 自动修复;update_one 明确用户匹配
关注一下sp_change_users_login存储过程,如果你不还原master数据库的话;
应该有两个参数 auto_fix 自动修复;update_one 明确用户匹配
#3
TO:lovebowl(1212能给个例子吗?用了一下不怎么行
TO: hdhai9451(New New People---新新人类) :
我在新库中建立了一样登陆和用户名,然后给了权限,还是不行?我给了dbowner和储存过程A_prostore的权限。,再给我点指示好吗?也许我权限操作错误
谢谢
TO: hdhai9451(New New People---新新人类) :
我在新库中建立了一样登陆和用户名,然后给了权限,还是不行?我给了dbowner和储存过程A_prostore的权限。,再给我点指示好吗?也许我权限操作错误
谢谢
#4
up
#5
存储过程应该还在的,用户的确是会“没有掉”,建议在异地创建相同用户(第一次的时候)
然后每次还原生产数据库后用下面的proc修正用户信息;
master库我很少去还原的,代价太大,管理员也不一定允许;
ZT一个邹老大的proc用于解决这个问题的:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_validatelogin]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_validatelogin]
GO
/*--解决还原数据库产生的孤立用户问题
关于孤立用户的产生原因及解决办法,参考SQL联机丛书"孤立用户"部分
联机帮助上是删除孤立用户
本存储过程通过另一方法来解决此问题:
如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系
如果孤立用户的登录不存在,则为它建立一个登录
存储过程处理了两种情况:
一种情况是在还原数据库前已经创建了登录
但还原数据库后,无法用该登录访问还原的数据库
另一种情况是,当前SQL实例中,没有还原数据库中的登录用户
--邹建 2004.07(引用请保留此信息)--*/
/*--调用示例
exec p_validatelogin '库名','孤立用户名'
--*/
create proc p_validatelogin
@dbname sysname, --孤立用户所在的数据库名
@loginame sysname --孤立用户名
as
if db_id(@dbname) is null
begin
print '无此数据库'
return
end
declare @s nvarchar(4000),@sid binary(16)
if exists(select * from master..sysxlogins where name=@loginame)
begin --如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure with override
select @sid=sid from master..syslogins where name=@loginame
set @s='update ['+replace(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure with override
end
else
begin --如果没有该登录,则创建登录
set @s='SELECT @sid=sid FROM ['+replace(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go
然后每次还原生产数据库后用下面的proc修正用户信息;
master库我很少去还原的,代价太大,管理员也不一定允许;
ZT一个邹老大的proc用于解决这个问题的:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_validatelogin]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_validatelogin]
GO
/*--解决还原数据库产生的孤立用户问题
关于孤立用户的产生原因及解决办法,参考SQL联机丛书"孤立用户"部分
联机帮助上是删除孤立用户
本存储过程通过另一方法来解决此问题:
如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系
如果孤立用户的登录不存在,则为它建立一个登录
存储过程处理了两种情况:
一种情况是在还原数据库前已经创建了登录
但还原数据库后,无法用该登录访问还原的数据库
另一种情况是,当前SQL实例中,没有还原数据库中的登录用户
--邹建 2004.07(引用请保留此信息)--*/
/*--调用示例
exec p_validatelogin '库名','孤立用户名'
--*/
create proc p_validatelogin
@dbname sysname, --孤立用户所在的数据库名
@loginame sysname --孤立用户名
as
if db_id(@dbname) is null
begin
print '无此数据库'
return
end
declare @s nvarchar(4000),@sid binary(16)
if exists(select * from master..sysxlogins where name=@loginame)
begin --如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure with override
select @sid=sid from master..syslogins where name=@loginame
set @s='update ['+replace(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure with override
end
else
begin --如果没有该登录,则创建登录
set @s='SELECT @sid=sid FROM ['+replace(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go
#6
谢谢一点红,用了你提供的储存过程后,用户的权限的确变了。我原来导入的时候,该用户U创建的一个储存过程P1也没有了,后来在数库中重新建立了P1,但是U还是不能用P1现在,请问你知道原因吗?
#7
程序提示:[Microsoft][ODBC SQL Server Driver][SQL Server]未能找到存储过程 'P1'。
#8
up
#9
装SP3了?
#1
因為你沒有還原master數據庫。
最好是刪除原來的用戶,重新建立一個和原來一樣的新用戶。
最好是刪除原來的用戶,重新建立一個和原來一樣的新用戶。
#2
刚复习到这个问题
关注一下sp_change_users_login存储过程,如果你不还原master数据库的话;
应该有两个参数 auto_fix 自动修复;update_one 明确用户匹配
关注一下sp_change_users_login存储过程,如果你不还原master数据库的话;
应该有两个参数 auto_fix 自动修复;update_one 明确用户匹配
#3
TO:lovebowl(1212能给个例子吗?用了一下不怎么行
TO: hdhai9451(New New People---新新人类) :
我在新库中建立了一样登陆和用户名,然后给了权限,还是不行?我给了dbowner和储存过程A_prostore的权限。,再给我点指示好吗?也许我权限操作错误
谢谢
TO: hdhai9451(New New People---新新人类) :
我在新库中建立了一样登陆和用户名,然后给了权限,还是不行?我给了dbowner和储存过程A_prostore的权限。,再给我点指示好吗?也许我权限操作错误
谢谢
#4
up
#5
存储过程应该还在的,用户的确是会“没有掉”,建议在异地创建相同用户(第一次的时候)
然后每次还原生产数据库后用下面的proc修正用户信息;
master库我很少去还原的,代价太大,管理员也不一定允许;
ZT一个邹老大的proc用于解决这个问题的:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_validatelogin]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_validatelogin]
GO
/*--解决还原数据库产生的孤立用户问题
关于孤立用户的产生原因及解决办法,参考SQL联机丛书"孤立用户"部分
联机帮助上是删除孤立用户
本存储过程通过另一方法来解决此问题:
如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系
如果孤立用户的登录不存在,则为它建立一个登录
存储过程处理了两种情况:
一种情况是在还原数据库前已经创建了登录
但还原数据库后,无法用该登录访问还原的数据库
另一种情况是,当前SQL实例中,没有还原数据库中的登录用户
--邹建 2004.07(引用请保留此信息)--*/
/*--调用示例
exec p_validatelogin '库名','孤立用户名'
--*/
create proc p_validatelogin
@dbname sysname, --孤立用户所在的数据库名
@loginame sysname --孤立用户名
as
if db_id(@dbname) is null
begin
print '无此数据库'
return
end
declare @s nvarchar(4000),@sid binary(16)
if exists(select * from master..sysxlogins where name=@loginame)
begin --如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure with override
select @sid=sid from master..syslogins where name=@loginame
set @s='update ['+replace(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure with override
end
else
begin --如果没有该登录,则创建登录
set @s='SELECT @sid=sid FROM ['+replace(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go
然后每次还原生产数据库后用下面的proc修正用户信息;
master库我很少去还原的,代价太大,管理员也不一定允许;
ZT一个邹老大的proc用于解决这个问题的:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_validatelogin]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_validatelogin]
GO
/*--解决还原数据库产生的孤立用户问题
关于孤立用户的产生原因及解决办法,参考SQL联机丛书"孤立用户"部分
联机帮助上是删除孤立用户
本存储过程通过另一方法来解决此问题:
如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系
如果孤立用户的登录不存在,则为它建立一个登录
存储过程处理了两种情况:
一种情况是在还原数据库前已经创建了登录
但还原数据库后,无法用该登录访问还原的数据库
另一种情况是,当前SQL实例中,没有还原数据库中的登录用户
--邹建 2004.07(引用请保留此信息)--*/
/*--调用示例
exec p_validatelogin '库名','孤立用户名'
--*/
create proc p_validatelogin
@dbname sysname, --孤立用户所在的数据库名
@loginame sysname --孤立用户名
as
if db_id(@dbname) is null
begin
print '无此数据库'
return
end
declare @s nvarchar(4000),@sid binary(16)
if exists(select * from master..sysxlogins where name=@loginame)
begin --如果已经有该登录,则直接修改系统表
exec sp_configure 'allow updates',1 reconfigure with override
select @sid=sid from master..syslogins where name=@loginame
set @s='update ['+replace(@dbname,']',']]')
+']..sysusers set sid=@sid where name=@loginame and islogin=1'
exec sp_executesql @s
,N'@sid binary(16),@loginame sysname'
,@sid,@loginame
exec sp_configure 'allow updates',0 reconfigure with override
end
else
begin --如果没有该登录,则创建登录
set @s='SELECT @sid=sid FROM ['+replace(@dbname,']',']]')
+']..sysusers WHERE islogin=1 and name=@loginame'
exec sp_executesql @s
,N'@sid binary(16) out,@loginame sysname'
,@sid out,@loginame
exec sp_addlogin @loginame=@loginame,@sid=@sid
end
go
#6
谢谢一点红,用了你提供的储存过程后,用户的权限的确变了。我原来导入的时候,该用户U创建的一个储存过程P1也没有了,后来在数库中重新建立了P1,但是U还是不能用P1现在,请问你知道原因吗?
#7
程序提示:[Microsoft][ODBC SQL Server Driver][SQL Server]未能找到存储过程 'P1'。
#8
up
#9
装SP3了?