Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用户可以创建但不能执行存储过程_Sql_Sql Server_Tsql_Powerbuilder - Fatal编程技术网

Sql 用户可以创建但不能执行存储过程

Sql 用户可以创建但不能执行存储过程,sql,sql-server,tsql,powerbuilder,Sql,Sql Server,Tsql,Powerbuilder,问题 我有一个SQL Server登录名,可以创建存储过程,但不能执行它们。我无法使用其他登录名授予execute,因此我正在寻找在sp中运行代码或授予这些权限的替代方法 对对象“sp_mystoredprocedurename”、数据库“mydatabasename”、架构“dbo”的执行权限被拒绝 用户无法将execute授予自己 无法授予、拒绝或撤销对sa、dbo、实体所有者、信息架构、sys或您自己的权限 背景 我们有一个用Powerbuilder编写的Windows软件应用程序,它可以

问题

我有一个SQL Server登录名,可以创建存储过程,但不能执行它们。我无法使用其他登录名授予execute,因此我正在寻找在sp中运行代码或授予这些权限的替代方法

对对象“sp_mystoredprocedurename”、数据库“mydatabasename”、架构“dbo”的执行权限被拒绝

用户无法将execute授予自己

无法授予、拒绝或撤销对sa、dbo、实体所有者、信息架构、sys或您自己的权限

背景

我们有一个用Powerbuilder编写的Windows软件应用程序,它可以创建和更新SQL Server数据库

在第一次启动时,应用程序会提示数据库管理员登录,它使用1次(我们不存储此信息)来创建数据库和登录。登录名被授予
db_ddladmin
db_datareader
db_datawriter
权限。我们目前有数百个这样的应用程序和数据库运行在我们管理的服务器上,但也运行在我们客户自己的服务器上

出于这个原因,我会尽一切努力避免再次要求用户进行db管理员登录,以便授予执行权限,这将是最简单的方法。。。当然,也不能将所有服务器降级到SQL Server 2000:)

我试图实现的存储过程是一个“getnewid”方法。目前,我的Powerbuilder代码使用多个嵌入式TSQL语句来实现这一点,但由于网络性能问题,我希望将这些语句移到单个存储过程中。

这有帮助吗

CREATE ROLE db_executer
GRANT EXECUTE to db_executer
EXEC sp_addrolemember N'db_executer', N'<username>'
创建角色数据库执行器
将EXECUTE授予db_executer
EXEC sp_addrolemember N'db_executer',N''
试试这个

GRANT EXECUTE ON sp_OACreate to UserLogin
GO

恐怕不行,因为登录用户无法执行存储过程。所以我不能执行sp_addrolemember…@MartijnKooij不,当然不能,你不能黑客数据库授予自己更多的权限,为了让你的用户能够执行所有的过程,包括那些在未来,你需要运行这个脚本。你需要一个数据库管理员来为你运行这个没有数据库管理员,所以我不能使用grant。我有99%的把握这是第22条陷阱,因此不可能解决。我只是想知道我是否错过了什么,或者是否还有其他选择。在SQL Server 2000中,如果允许您创建存储过程,您就可以执行它。您好,如果您在SQL逻辑中不进行任何数据修改,则用户定义函数(UDF)可以作为替代方法。如果您有权执行/创建它们。