4

问题

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

对象“sp_mystoredprocedurename”、数据库“mydatabasename”、模式“dbo”的执行权限被拒绝。

用户不能授予自己执行权限

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

背景

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

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

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

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

4

2 回答 2

4

这有帮助吗?

CREATE ROLE db_executer
GRANT EXECUTE to db_executer
EXEC sp_addrolemember N'db_executer', N'<username>'
于 2013-07-11T09:50:54.323 回答
0

尝试这个。

GRANT EXECUTE ON sp_OACreate to UserLogin
GO
于 2013-07-11T11:47:13.277 回答