2016-11-21 3 views
0

У меня есть база данных, и в зависимости от пользователя я хочу, чтобы они видели разные вещи, используя хранимые процедуры. Я не хочу, чтобы они могли выполнять прямые команды SQL, такие как select. Это возможно?Могу ли я ограничить пользователя 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

Я нашел, что это самый быстрый способ удалить все права. Возможно, не так аккуратно, хотя –

+0

У меня есть обратная связь от другого источника, что SQL-инъекции могут быть проблемой с этим решением. Могу ли я избежать этой проблемы? –