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

时间:2013-07-11 09:19:59

标签: sql sql-server tsql powerbuilder

问题

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

  

对象' sp_mystoredprocedurename',数据库' mydatabasename',架构' dbo'上的EXECUTE权限被拒绝。

用户无法向自己授予执行权

  

无法授予,拒绝或撤消对sa,dbo,实体所有者,information_schema,sys或您自己的权限。

背景

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

首次启动时,应用程序会提示输入数据库管理员登录名,该登录名使用1次(我们不会存储此信息)来创建数据库和登录名。登录时会获得db_ddladmindb_datareaderdb_datawriter权限。我们目前有数百个这样的应用程序和数据库在我们管理的服务器上运行,但也在我们的客户上运行。自己的服务器

出于这个原因,我会做任何事情来防止需要再次请求用户进行数据库管理员登录,这样我就可以授予执行权限,这将是最简单的方法...将所有服务器降级到SQL Server 2000是当然也不是一个选择:)

我试图实现的存储过程是" getnewid"方法。目前我的Powerbuilder代码使用多个嵌入式TSQL语句来实现此目的,但由于网络性能问题,我想将它们移到单个存储过程中。

2 个答案:

答案 0 :(得分:3)

这有帮助吗?

CREATE ROLE db_executer
GRANT EXECUTE to db_executer
EXEC sp_addrolemember N'db_executer', N'<username>'

答案 1 :(得分:0)

试试这个。

GRANT EXECUTE ON sp_OACreate to UserLogin
GO