我不认为这是可能的,但我希望我错过了一些东西。假设我在SQL Server 2012 SP3中有这个存储过程:
.symfix
.reload
!analyze -v
我想授予数据库主体执行CREATE PROCEDURE [dbo].[myproc]
AS
SELECT * FROM [dbo].[mytable]
的权限,而不授予基础表上[myproc]
的权限。
我尝试了各种SELECT
语句而没有运气。当我执行GRANT
时,我仍然会收到错误
选择mytable
上的权限被拒绝
数据库主体不是数据库所有者,我不想让他成为数据库所有者。
我正在尝试做什么?
感谢。
答案 0 :(得分:1)
Weicher, 除非在基础表上有特定的拒绝,否则此授权声明应该有效:
angular.module('app')
.controller('myController', myController);
function myController() {
var vm = this; // This is necessary for Controller As syntax to work
vm.decisionSelected = "1"; // Assuming you want a default value
vm.decisionList = [
{
"decisionCode": "1",
"decisionDescription": "YES"
},
{
"decisionCode": "2",
"decisionDescription": "NO"
},
{
"decisionCode": "3",
"decisionDescription": "MAYBE"
}];
}
使用以下代码进行测试:
GRANT Exec [dbo].[myproc] TO MyUser;
GO
当我通过六种方式改变代码到星期日时,我喜欢开始清洁,以确保我不会无意中发生任何事情并且非常有目的性。步。通过。步骤
如果是,则在实际表上执行相同的测试 - 您是否可以授予读取权限,然后可以删除读取权限。如果是这样,请重新创建SP并重试。
抱歉,如果这太简单了,那么没有任何冒犯只是为了确保我们在同一页上进行测试。
如果它不起作用,请发布测试结果,我会尝试进一步提供帮助。
答案 1 :(得分:0)
GRANT EXECUTE ON SPNAME TO DBUSER
答案 2 :(得分:0)
如果您不想让DB Principle成为所有者,那么您需要授予它“ Grant With”权限,以使它们进一步传递。
假设“ dbo”是所有者,“ ElevatedUser”是具有选择权限的新用户
GRANT EXECUTE ON [dbo].[myproc] TO ElevatedUser WITH GRANT OPTION AS [dbo]
GRANT EXECUTE ON [dbo].[myproc] TO MyUser as ElevatedUser
或者,如果您真的被卡住了,可以将其放在storedproc本身内
CREATE PROCEDURE [dbo].[myproc]
with EXECUTE AS 'dbo'
AS
BEGIN