存储过程权限设置

pol000 2011-09-28 01:24:56
数据库名:TableA
存储过程名:ProcedureA
需要支持:SQL2000和SQL2005

需求:存储过程需要开放给第三方,为了安全性,需要建立一个用户,只能执行存储过程,不能做别的操作,并且最好不要看见表名和别的存储过程名称,谢谢。
需要使用SQL语句来实现。
...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
金汐 2011-09-28
  • 打赏
  • 举报
回复

USE master;
if db_id('testdb') is not null
drop database testdb;
go
create database testdb;
go
use testdb;
go
if object_id('testtab') is not null
drop table testtab;
go
create table testtab
(
Id int not null
);
if object_id('p_test') is not null
drop proc p_test;
go
create proc p_test
as
delete dbo.testTab
go


你可以建一个测试库,建一个表.建一个SQLSERVER登录名如:test
然后在testdb里面建一个用户:用户名test映射到登录名test.
给text赋执行存储过程p_test的权限. (GRANT exec on p_test TO test;)
然后可以执行该存储过程了.即使没有select,update这些权限也是可以的.只要你的存储过程里不是动态SQL
如果是动态SQL里面有delete之类的,就需要赋delete这些权限了.

估计LS的各位那样说可能理解的和我理解的不一样.也不知道我理解的是不是LZ需要的.
金汐 2011-09-28
  • 打赏
  • 举报
回复
可以的.可以添加某个用户,用户只有执行你给的存储过程的权限.甚至这个用户都不需要有表的select权限.
前提是你的存储过程里面不能用动态SQL
hb1122 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pol000 的回复:]
貌似不用加密吧

只要建立一个用户,让这个用户只有执行这个存储过程的权限就行了吧
[/Quote]

改了你哭去?看到表名了你哭去?
pol000 2011-09-28
  • 打赏
  • 举报
回复
貌似不用加密吧

只要建立一个用户,让这个用户只有执行这个存储过程的权限就行了吧
chuanzhang5687 2011-09-28
  • 打赏
  • 举报
回复
理解错了
如果说只能执行存储过程的话,加密一下就好了!
加密前最好数据库以外的有备份存储过程的语句
要不然事就大了
--小F-- 2011-09-28
  • 打赏
  • 举报
回复
存储过程本身可以用使用 WITH ENCRYPTION 选项加密
dawugui 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 pol000 的回复:]
数据库名:TableA
存储过程名:ProcedureA
需要支持:SQL2000和SQL2005

需求:存储过程需要开放给第三方,为了安全性,需要建立一个用户,只能执行存储过程,不能做别的操作,并且最好不要看见表名和别的存储过程名称,谢谢。
需要使用SQL语句来实现。
[/Quote]这个最好用存储过程加密.其他的方法貌似不好.
--小F-- 2011-09-28
  • 打赏
  • 举报
回复
MD5加密
chuanzhang5687 2011-09-28
  • 打赏
  • 举报
回复
可以另外建一个专门存储 存储过程和函数的数据库,然后映射这相应的数据库建立同义词
把这个只含有存储过程和函数的数据库给第三方看
xuam 2011-09-28
  • 打赏
  • 举报
回复
存储过程加密,建立个用户,只能执行它就行.

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧