2016-11-21 93 views
0

我有一个数据库,并根据用户我想他们使用存储过程来看到不同的东西。我不希望他们能够像select一样执行直接的SQL命令。这可能吗?我可以将SQL用户限制为仅存储过程吗?

+1

是的,这是可能的。只能授予程序权限。 – jarlh

+2

是的,只授予您希望他们使用的程序的执行权限。 –

+1

之类的东西的权限等都是**高度依赖**在其RDBMS这是出于。请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。已添加标签 –

回答

1

在过去,我不得不允许访问一些程序,我会给登录公共权利和数据库映射。这将让他们登录,但不做任何事情。然后我给每个存储过程选择权。我很确定我不必做任何事情。

如果你有大量的存储过程,那么本文将帮助你创建这个特定角色/模式。

http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html

+0

我有从其他来源的反馈,SQL注入可能与此解决方案的问题。我可以避免这个问题吗? –

+0

这是关于执行权。与sql注入无关。这个话题在很多其他地方都有详细讨论,并且关于你如何开发你的存储过程,而不是你如何赋予它们执行权限。 –

1

你需要从所有组中删除该用户就用GRANT你希望他们有存储过程。

-- Syntax for SQL Server and Azure SQL Database 

-- Simplified syntax for GRANT 
GRANT { ALL [ PRIVILEGES ] } 
     | permission [ (column [ ,...n ]) ] [ ,...n ] 
     [ ON [ class :: ] securable ] TO principal [ ,...n ] 
     [ WITH GRANT OPTION ] [ AS principal ] 
+1

他为什么要将他们从“群体”中删除?他可能应该创建一个特定的**角色**。 –

+0

我发现这是删除所有权利的最快方法。从其他来源,SQL注入也许不是整齐,虽然 –

+0

我已经得到的反馈可能是该解决方案的问题。我可以避免这个问题吗? –

相关问题