本地调试一切ok,上传至虚拟主机后,报错Microsoft OLE DB Provider for SQL Server 错误 '80040e09'
拒绝了对对象 'sp_Util_Page' (数据库 'abcd',架构 'dbo')的 EXECUTE 权限。
尝试过按照网上的办法,安全设置里面找到dbo架构,添加public,权限授予添加 修改 删除 选择 更新的权限,但是又提示:无法对架构'dbo'执行查找,因为它不存在,或者您没有所需的权限我又切换到登录用户的选项,授予登录用户和dbo db_reader ,db_writer,db_owner,都提示错误,不是找不到就是没权限这是神马个情况……必须找管理员用sa来授权吗?
拒绝了对对象 'sp_Util_Page' (数据库 'abcd',架构 'dbo')的 EXECUTE 权限。
尝试过按照网上的办法,安全设置里面找到dbo架构,添加public,权限授予添加 修改 删除 选择 更新的权限,但是又提示:无法对架构'dbo'执行查找,因为它不存在,或者您没有所需的权限我又切换到登录用户的选项,授予登录用户和dbo db_reader ,db_writer,db_owner,都提示错误,不是找不到就是没权限这是神马个情况……必须找管理员用sa来授权吗?
先授权
grant exec on abcd.dbo.存储过程 to 登录名(用户名)
然后再执行
-- Author: 赵文忠
-- Create date: 20120510
-- Description: 给用户授予存储过程对应的权限(查看定义、执行、修改)
CREATE procedure grant_purview_procedure_for_user
@db_name sysname,--DB名
@sys_user sysname,---登录名
@view_definition bit=1,---查看定义
@execute bit=1,---执行
@alter bit=0--修改
as
begin
set nocount on
declare @sql_definition varchar(2000)
declare @sql_execute varchar(2000)
declare @sql_alter varchar(2000)
declare @use_db varchar(1200)
set @use_db='USE '+@db_name+CHAR(13)+CHAR(10)+' '
declare @i int,@count int
declare @str_sys nvarchar(1200)
declare @STR nvarchar(1200)
SET @STR=N'select @count1 =COUNT (1) from '+@db_name+'.sys.sysobjects where type=''P'''
exec sp_executesql @STR,N'@count1 int output',@count1=@count output
set @i=1
declare @name sysname
while @i<=@count
begin
set @sql_definition='GRANT VIEW DEFINITION ON '+@db_name+'.dbo.'
set @sql_execute='GRANT EXECUTE ON '+@db_name+'.dbo.'
set @sql_alter='GRANT ALTER ON '+@db_name+'.dbo.'
set @str_sys=N'select @name1 =name from (select row_number() over(order by name)rn,name from '+@db_name+'.sys.sysobjects where type=''P'')tmp where rn=@ii '
exec sp_executesql @str_sys,N'@name1 nvarchar(256) output,@ii int',@ii=@i,@name1=@name output if @view_definition=1 and @execute=1 and @alter=1
begin
SET @sql_definition=@use_db+@sql_definition+@name+' TO '+@sys_user---查看
SET @sql_execute=@use_db+@sql_execute+@name+' TO '+@sys_user ---执行
SET @sql_alter=@use_db+@sql_alter+@name+' TO '+@sys_user---修改
EXEC (@sql_definition)
EXEC (@sql_execute)
EXEC (@sql_alter)
end
if @view_definition=1 and @execute=0 and @alter=0
begin
SET @sql_definition=@use_db+@sql_definition+@name+' TO '+@sys_user---查看
EXEC (@sql_definition)
end
if @view_definition=0 and @execute=1 and @alter=0
begin
SET @sql_execute=@use_db+@sql_execute+@name+' TO '+@sys_user ---执行 EXEC (@sql_execute)
end
if @view_definition=0 and @execute=0 and @alter=1
begin
SET @sql_alter=@use_db+@sql_alter+@name+' TO '+@sys_user---修改 EXEC (@sql_alter)
end
if @view_definition=1 and @execute=1 and @alter=0
begin
SET @sql_definition=@use_db+@sql_definition+@name+' TO '+@sys_user---查看
SET @sql_execute=@use_db+@sql_execute+@name+' TO '+@sys_user ---执行
EXEC (@sql_definition)
EXEC (@sql_execute) end
if @view_definition=1 and @execute=0 and @alter=1
begin
SET @sql_definition=@use_db+@sql_definition+@name+' TO '+@sys_user---查看
SET @sql_alter=@use_db+@sql_alter+@name+' TO '+@sys_user---修改
EXEC (@sql_definition)
EXEC (@sql_alter)
end if @view_definition=0 and @execute=1 and @alter=1
begin
SET @sql_execute=@use_db+@sql_execute+@name+' TO '+@sys_user ---执行
SET @sql_alter=@use_db+@sql_alter+@name+' TO '+@sys_user---修改 EXEC (@sql_execute)
EXEC (@sql_alter)
end
set @i+=1
end
set nocount off
end先创建该存储过程,然后获取该存储过程的执行权限。然后运行该存储过程。
就可以获取对应库下所有存储过程的 执行、修改、查看 权限了。dbo db_reader ,db_writer 只是针对表的。不适用于存储过程。
db_owner 就类似SA了。具有所有权。谨慎使用
'+' 附近有语法错误。
grant exec on abcd.dbo.存储过程 to 登录名(用户名)
然后再执行 zhge keyi ,xiexie!!