我必须编写脚本,我在其中创建了登录和用户,并且只允许Execute on
访问此USER以仅执行单个存储过程SP_SELECTDEPT
,但不能直接通过role
执行。因此,这样用户将只能执行此存储过程,但它无法正常工作。
BEGIN TRANSACTION
USE master
CREATE LOGIN QGtestlogin WITH PASSWORD = 'test123', CHECK_POLICY=off
GO
USE DEPT
CREATE USER QGtestlogin FOR LOGIN QGtestlogin
go
CREATE ROLE QGtestrole AUTHORIZATION QGtestlogin
GO
GRANT EXECUTE ON SP_SELECTDEPT TO QGtestrole
go
if @@ERROR > 0
begin
rollback transaction
end
else begin
commit transaction
end
但是当我使用这个新创建的用户登录时,它甚至没有显示要执行的存储过程。
注意: 我已使用sp_addrolemember
将用户添加到角色成员exec sp_addrolemember 'QGtestrole','QGtestlogin'
但仍然收到错误:
Msg 229, Level 14, State 5, Procedure SP_SELECTDEPT, Line 14
The SELECT permission was denied on the object 'Dept', database 'DEPT', schema 'dbo'.
答案 0 :(得分:0)
这似乎是SQLEXPRESS版本的问题,当我在我的实际开发数据库上运行相同的代码时,它们会被执行并且QGtestlogin能够执行存储过程。