У меня есть база данных, и в зависимости от пользователя я хочу, чтобы они видели разные вещи, используя хранимые процедуры. Я не хочу, чтобы они могли выполнять прямые команды SQL, такие как select. Это возможно?Могу ли я ограничить пользователя SQL только хранимыми процедурами?
ответ
В прошлом я должен был дать доступ к горстке процедур, и я дал бы логин общественные права и не отображение базы данных. Это позволит им войти, но ничего не делать. Затем я дал избранные права каждой хранимой процедуре. Я почти уверен, что мне не нужно было ничего делать.
Если у вас много хранимых процедур, эта статья поможет вам создать определенную роль/схему для этого.
http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
У меня есть обратная связь от другого источника, что SQL-инъекции могут быть проблемой с этим решением. Могу ли я избежать этой проблемы? –
Речь идет о правах исполнения. Нет отношения к SQL-инъекции. Эта тема подробно обсуждается во многих других местах и касается того, как вы разрабатываете свои хранимые процедуры, а не как вы даете права на их выполнение. –
Вам необходимо удалить пользователя из всех групп, а затем просто использовать 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 ]
Зачем ему удалять из «групп»? Вероятно, он должен создать определенную ** роль **. –
Я нашел, что это самый быстрый способ удалить все права. Возможно, не так аккуратно, хотя –
У меня есть обратная связь от другого источника, что SQL-инъекции могут быть проблемой с этим решением. Могу ли я избежать этой проблемы? –
Да, это возможно. Предоставляйте только привилегии процедуры. – jarlh
Да, разрешайте только разрешения на выполнение процедур, которые вы хотите использовать. –
Такие вещи, как разрешения и т. Д. ** сильно зависят **, для которых RDBMS это для. Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –