В запросе sql отказано - PullRequest
3 голосов
/ 27 июня 2011

Я пытаюсь выполнить следующий запрос через классический набор записей asp -

SQL = "Select P_Name as P_Name, P_Description as P_Description 
       from L_PagePermission 
       inner join A_Permission on p_permissionID = pp_PermissionID 
       inner join A_Page on P_PageID = PP_PageID 
       where P_PageID = 85 
       order by p_Name"   

Хотя я столкнулся с проблемой с разрешениями.Таким образом, я получаю сообщение об ошибке:

Поставщик Microsoft OLE DB для драйверов ODBC Ошибка '80040e09'

[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Разрешение SELECTОтказано в объекте «A_Permission», базе данных «HRWB_3_0», схеме «dbo».

Как мне выполнить этот запрос без изменения настроек разрешений.Как я могу сделать это с помощью хранимой процедуры?(Может кто-нибудь привести пример тоже)

Я не могу изменить настройки базы данных, мне приходится иметь дело с тем, что я получил.Я просмотрел множество файлов веб-сайтов, и, похоже, они в основном зависят от хранимых процедур.

Ответы [ 2 ]

5 голосов
/ 27 июня 2011

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

Другой подход заключается в написании новой хранимой процедуры и предоставлении доступа EXECUTE к этой хранимой процедуре. SQL для предоставления разрешений в любом случае прост:

Чтобы предоставить SELECT доступ к таблице: GRANT SELECT ON [TableName] TO [loginName]

Чтобы предоставить EXECUTE доступ к хранимой процедуре: GRANT EXECUTE ON [procedureName] TO [loginName]

Еще один подход, который может сработать, но имеет очевидные последствия для безопасности, - это добавить имя входа, которое вы используете, в роль db_owner для этой базы данных. Это должно работать, но НЕ рекомендуется, если вы не знакомы с угрозами безопасности, которые представляют.

0 голосов
/ 27 июня 2011

Если у вас нет разрешения на выбор из таблицы, не будет способа обойти отсутствие разрешения, кроме подключения к СУБД в качестве пользователя, имеющего разрешение на выбор из таблицы.В этом смысл системы разрешений - предотвращать несанкционированное выполнение действий, которые им запрещены.

...