【发布时间】:2015-04-24 23:15:27
【问题描述】:
我正在为一些新开发人员配置数据库用户,我遇到了一些困难,因为我阅读了很多文章,但对我来说效果不太好。我已经手动和使用 T-SQL 尝试了各种配置,但我需要一种更有效的方法。
我的目标:
我可以启动一些 TSQL 来授予数据库用户以下权限:
- 授予执行数据库中所有存储过程的权限
- 拒绝查看所有这些存储过程的定义的权限
- 授予数据库中所有表的 SELECT、UPDATE、INSERT、DELETE 权限
- 拒绝查看数据库中所有表的定义的权限(我不希望他们查看数据)
我尝试过的:
我已经手动实现了这一点,但我有 200 多个存储过程和 100 多个表,所以我不想手动完成。从 T-SQL 方面,我设法使以下工作:
USE database_name;
GRANT EXECUTE TO [security_account];
这有效并允许用户运行存储过程,但他们无法查看实际的查询代码。我需要与上述表格相同的逻辑。
感谢您的帮助。
【问题讨论】:
-
当您说您不希望他们查看数据时,您的意思是您不希望他们查看架构吗?否则授予他们
select毫无意义。 -
@TZHX 我并没有真正考虑过。有没有办法让存储过程选择但停止用户?我没想到他们可以在应用程序中编写自己的查询并选择他们想要的所有数据
-
如果用户有权执行存储过程,则存储过程中的任何内容都会运行,但并不意味着用户有权在存储过程之外执行此操作(存储过程执行的那些操作)。
-
@TZHX 我找到了解决这个问题的方法。我允许用户执行存储,但我作为有权选择/更新等的不同用户执行存储过程。这是因为存储过程是动态的。您如何看待这个解决方案?
-
如果您只想更改所有表的权限,那么文档不太完整且已知的 sys 过程 sp_MSforeachtable 可能会成功: exec sp_MSforeachtable 'grant select, insert, update, delete on ?公开; '
标签: sql sql-server tsql permissions user-roles