SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.03.2016 17:00:31

bobanman
Участник
Зарегистрирован: 22.01.2016
Сообщений: 13

Запрос и привилегии

Всем доброго времени суток.

Вопрос следующий:

Есть юзер test_user, мне нужно при помощи sql-запроса узнать, есть ли у него привилегии INSERT и UPDATE на определенную схему, скажем test_schema.

Запрос два столбца [priv] - название привилегии и [has] - соответственно 1- если привилегия есть и 0- если привилегии нет. Сочинил я что-то типа такого:

                   select
                        CONCAT_WS(' ', p.PRIVILEGE_TYPE, 'ON', CONCAT('test_schema', '.', '*')) AS priv
                        , if(ifnull(GRANTEE, 1), 0, 1) has
                    from (select 'INSERT' PRIVILEGE_TYPE union select 'UPDATE') p
                    left join
                    (select * from INFORMATION_SCHEMA.SCHEMA_PRIVILEGES WHERE
                        GRANTEE=CONCAT('\'',REPLACE(CURRENT_USER(),'@','\'@\''),'\'')
                        AND TABLE_SCHEMA = 'test_schema') up using(PRIVILEGE_TYPE);



Возвращает эта штука что-то типа такого:


priv                      |     has
-----------------------------------------
'INSERT ON test_schema.*' |    '1'
-----------------------------------------
'UPDATE ON test_schema.*' |     '0'
----------------------------------------
 



Но вот проблема, этот запрос не покрывает унаследованных привилегий. Допустим если пользователю test_user выдать такую привилегию

GRANT UPDATE ON *.* TO 'test_user';



то во втором столбце второй строки все еще будет 0 хотя по факту он может апдейтить все что хочет.

Вопрос, как переписать данный запрос, чтобы он покрыл все кейсы, и возвращал 0 исключительно тогда, когда у пользователя нет прав апдейтить в схеме test_schema. Или может есть в MySql какая-то волшебная умная функция типа HAS_PERMS_BY_NAME в MS Sql.

Заранее благодарен.

Отредактированно bobanman (02.03.2016 17:01:53)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson