散人笔记

学术资源与网络技术分享

  • 首页
  • TAGS
  • 搜索引擎大全

SQL Server运行查询分析器在数据库中拒绝了SETUSER权限出错

在导入数据之前运行SQL Serve查询分析器时,出现错误提示:在数据库‘abc’中拒绝了SETUSER权限,或者“SETUSER permission denied in database 'abc'”。
这种情况通常是在转移SQL数据库的时候出现,由于不同服务器给予的权限不同,当把数据库从一台服务器迁移到另一台服务器时(比如从万网的虚拟主机迁移到其它服务商的虚拟主机),就会出现授予的权限不一致而出错的情况。

解决方法:这时候,要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员资格。但一般来讲SETUSER权限默认授予sysadmin 固定服务器角色成员且不可转让。所以出现这种问题很正常。一般可以不需劳烦服务器管理员修改权限,只需要将sql查询文件中的SETUSER 删除即可。比如:

SETUSER 'John'
GO
GRANT SELECT ON computer_types TO joe
GO
SETUSER

如果是从万网的SQL Server数据库生成的sql查询文件中,可以先将如下语句删除:

setuser N'John'
GO

CREATE procedure NewSortChange
(                 
             @Lang int,
    @FormId int,
    @JumpId int,
    
    @err int=0  output
)
AS

select @err=0
declare @sort1 int, @sort2 int, @i int, @sort_small int, @sort_big int


if @FormId=@JumpId
begin
    select @err=1
    GOTO _END
end

select @sort1=SortId from news where id=@FormId and LanauageId=@Lang
if @@rowcount<1
begin
    select @err=1
    GOTO _END
end

select @sort2=SortId from news where id=@JumpId and LanauageId=@Lang
if @@rowcount<1
begin
    select @err=1
    GOTO _END
end

if @sort1>@sort2
begin
    set @i=1
    set @sort_small=@sort2-1
    set @sort_big  =@sort1
end
else
begin
    set @i=-1
    set @sort_small=@sort1
    set @sort_big  =@sort2+1
end

update news set SortId=SortId+@i where LanauageId=@Lang and SortId>@sort_small and SortId<@sort_big
update news set SortId=@sort2 where LanauageId=@Lang and id=@FormId

_END:
GO
setuser
GO

保存之后然后再打开该sql文件并运行即可消除SETUSER权限错误提示。
以下版权声明必须遵守,转载时必须以链接的形式注明如下信息:
原载于 散人笔记
原文地址 http://www.eryi.org/blog/post/sql-server-setuser-.html
  1. kangre  

    哦,没有接触过这类的错误,多谢博主的资料!

发表评论:

Powered By 散人笔记—学术与网络技术博客

版权声明:转载本站文章必须遵循“署名-非商业用途-保持一致”的创作共用协议