SQL,只授予用户readaccess,执行存储过程插入,删除,删除等

时间:2016-12-14 21:15:40

标签: sql sql-server stored-procedures permissions

我试图找到答案,但这种情况似乎是独特的或不寻常的。 运行SQL 2008和2012.我们想要设置一个只能读取数据,执行存储过程并查看存储过程定义的用户(最后一位是可选的)。我们称这个用户为“servicedesk”。我还创建了一个名为“Exec_sps”的角色

存储过程应该能够插入,更新,删除,删除表。但是用户“servicedesk”根本不应该这样做。只能通过存储过程。当然,用户不应该改变程序本身。

我设法通过向角色添加执行并将用户“servicedesk”添加到此角色来创建概念验证。但是当我这样做时,用户“帮助台”总是获得更高的权限来改变存储过程,这是我们想要避免的。

所以基本上,给予用户低访问权限,用户可以执行存储过程,并且对该过程有很多权限,而无需用户继承存储过程的访问权。

可行吗?

此致

1 个答案:

答案 0 :(得分:1)

这些要求对我来说似乎很奇怪,但这似乎在SQL 2012中有用。

以[sa]或具有固定服务器角色[sysadmin]

成员身份的登录名运行此脚本
from collections import Counter

with open(mypath + '/' + i, 'r') as fileref:    
    wordDict = Counter( word for line in fileref for word in line.split() )

现在以登录[ServiceDesk](上面创建)连接并一次运行一个脚本命令:

CREATE LOGIN ServiceDesk
WITH PASSWORD = '123ABCdef'

USE YourDatabase
GO

CREATE USER SDUser
FOR LOGIN ServiceDesk
GO

CREATE TABLE dbo.Stooge(
    ID INT IDENTITY PRIMARY KEY,
    Name VARCHAR(32)
)

CREATE PROC dbo.AddStooge
    @StoogeName VARCHAR(32)
AS
INSERT INTO dbo.Stooge(Name) VALUES(@StoogeName);
GO

CREATE PROC dbo.UpdateStooge
    @StoogeId INT,
    @NewName VARCHAR(32)
AS
UPDATE dbo.Stooge
SET Name = @NewName
WHERE ID = @StoogeId
GO

CREATE PROC dbo.DeleteStooge
    @StoogeId INT
AS 
DELETE FROM dbo.Stooge
WHERE ID = @StoogeId
GO

CREATE PROC dbo.DropStoogeTable
WITH EXECUTE AS OWNER
AS
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_SCHEMA = 'dbo' AND t.TABLE_NAME = 'Stooge')
    DROP TABLE dbo.Stooge;
GO

ALTER ROLE db_datareader ADD MEMBER SDUser
GRANT EXECUTE ON dbo.AddStooge TO SDUser
GRANT EXECUTE ON dbo.UpdateStooge TO SDUser
GRANT EXECUTE ON dbo.DeleteStooge TO SDUser
GRANT EXECUTE ON dbo.DropStoogeTable TO SDUser