限制用户只能执行某个存储过程

--总的思路就是限制对方只能执行这个存储过程,其它的操作都做不了
--以 test 为例,你自己要将 test 全部替换成你自己的库
------ 这一部分是在测试库加测试表和测试的存储过程 Begin ---------
USE test
GO
--创建表
IF OBJECT_ID('theTable') IS NOT NULL DROP TABLE theTable
GO
CREATE TABLE theTable( id INT PRIMARY KEY IDENTITY(1,1),[name] NVARCHAR(20) )
INSERT INTO theTable VALUES (N'小明')
GO
--select * from theTable
--创建存储过程Proc_Test1
IF OBJECT_ID('Proc_Test1') IS NOT NULL DROP PROC Proc_Test1
GO
CREATE PROC Proc_Test1
AS
BEGIN
	INSERT INTO theTable VALUES (N'小明')
END
GO
--创建存储过程Proc_Test2
IF OBJECT_ID('Proc_Test2') IS NOT NULL DROP PROC Proc_Test2
GO
CREATE PROC Proc_Test2
AS
BEGIN
	select * from theTable
END
GO
--执行存储过程
EXEC Proc_Test1
EXEC Proc_Test2
GO
------ 这一部分是在测试库加测试表和测试的存储过程 End ---------
 
--创建用户onlyProc/onlyProc123!
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins AS s WHERE s.name='onlyProc')
	DROP LOGIN [onlyProc]
GO
CREATE LOGIN [onlyProc] WITH PASSWORD=N'onlyProc123!', DEFAULT_DATABASE=[test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
--为用户onlyProc添加数据库test执行存储过程Proc_Test1、Proc_Test2的权限
USE [test]
GO
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME='onlyProc' AND type_desc='SQL_USER')  
    DROP USER [onlyProc]  
GO  
CREATE USER [onlyProc] FOR LOGIN [onlyProc]
GO
GRANT EXEC ON OBJECT::dbo.Proc_Test1 TO [onlyProc]
GRANT EXEC ON OBJECT::dbo.Proc_Test2 TO [onlyProc]
GO
 
 
------------------- 以下部分是以 onlyProc 账号登录之后再执行的情况 --------------------
USE test
GO
--用户只能运行存储过程
EXEC PROC_TEST1
EXEC PROC_TEST2


EXEC PROC_TEST
/*消息 229,级别 14,状态 5,过程 Proc_Test,行 1 [批起始行 69]
拒绝了对对象 'Proc_Test' (数据库 'test',架构 'dbo')的 EXECUTE 权限。
*/

SELECT * FROM theTable
/*
消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'theTable' (数据库 'test',架构 'dbo')的 SELECT 权限。
*/
 
DELETE FROM theTable
/*
消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'theTable' (数据库 'test',架构 'dbo')的 DELETE 权限。
*/
TRUNCATE TABLE theTable
/*
消息 1088,级别 16,状态 7,第 1 行
找不到对象 "theTable",因为它不存在或者您没有所需的权限。
*/
GO
ALTER PROC Proc_Test
AS
BEGIN
	TRUNCATE TABLE theTable
END
GO
/*
消息 3701,级别 14,状态 20,过程 Proc_Test,第 4 行
无法对 过程 'Proc_Test' 执行 更改,因为它不存在,或者您没有所需的权限。
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值