Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Как получить привилегии поьзователя (допустим на SELECT).   Найти похожие ветки 

 
tytus   (2006-09-07 14:35) [0]

Пишу так:
declare
 ARole varchar2(50);
 AUser varchar2(20);
cursor mcur is
 select * from dba_role_privs WHERE GRANTEE=AUser;
cursor tabpriv is
 select * from table_privileges where TABLE_NAME="MAINTABLE" and GRANTEE=ARole;
begin
AUser:="ADMIN";
 for cursorrec in mcur
   loop
     ARole:=cursorrec.GRANTED_ROLE;
     dbms_output.put_line(ARole);
 for cursorrec in tabpriv
   loop
     if cursorrec.SELECT_PRIV="Y" then
       dbms_output.put_line("SELECT=Y");
     end if;                
  end loop;
   end loop;
end;
Выводит
AQ_ADMINISTRATOR_ROLE
DBA
SIMPLEROLE     --своя роль
SELECT=Y
SROLE            --своя роль
SELECT=Y
А есть ли способ по-проще? Напишите плиз.


 
ANB ©   (2006-09-07 14:47) [1]


> tytus   (07.09.06 14:35)

самый простой способ в твоем случае - дернуть вьюху all_tables. Те таблицы, к которым ты не имеешь права на селект, в ней не отобразятся.


 
tytus   (2006-09-07 14:56) [2]

[1]
не совсем то, может неточно задал вопрос.
Я хочу создать процедуру, которая по имени таблицы и имени пользователя, проверит  ту или инную привилегию в зависимости от присвоенной роли. Этот пример - тестовый способ проверки. Нужно будет проверять привелегию на добавление записи и т.п.
Хотелось бы способ по-проще, если таковой есть...


 
ANB ©   (2006-09-07 15:23) [3]

проще будет проверять по имени таблицы, не припутывая роли. Они там справочно идут.


 
ANB ©   (2006-09-07 15:30) [4]

А для уточнения для какой схемы есть права - поле OWNER
Короче
select * from table_privileges
показывает все таблицы, которые ты можешь прочитать. С расшифровкой, у кого, имя таблицы, права развернуто, кто дал (напрямую или через роль).


 
tytus   (2006-09-07 16:33) [5]

>ANB
а что за значение "A" в таблице , если выполнить
select * from table_privileges where TABLE_NAME="MAINTABLE" в PL/SQL Dev.

GRANTEE        | OWNER |TABLE_NAME|GRANTOR|SEL_PRIV|INS_PRIV|DEL_PRIV  
MPOWER_ROLE|ADMIN   |MAINTABLE   |  ADMIN Y ->A Y

UPD_PRIV|
A
и так дал...


 
ANB ©   (2006-09-07 17:00) [6]

G - with Grant option
A - with Admin option

Кстати, учти, что если есть грант через роль и напрямую, то записи дублятся


 
tytus   (2006-09-07 17:11) [7]

>ANB
Спасибо.
Вот наваял функцию, но девелоперу не нравится.
create or replace function CheckUserRoles(AUserName in varchar2,
ATableName in varchar2) return boolean is
--  Result boolean;

 ARole varchar2(50);
cursor mcur is
 select * from sys.dba_role_privs WHERE GRANTEE=AUserName;
cursor tabpriv is
 select * from table_privileges where TABLE_NAME=ATableName and GRANTEE=ARole;
begin
 Result:=false;
 for cursorrec in mcur
   loop
     ARole:=cursorrec.GRANTED_ROLE;
 for cursorrec in tabpriv
   loop
     if (cursorrec.INSERT_PRIV="Y")or(cursorrec.INSERT_PRIV="A") then
       Result:=true;
     end if;                
  end loop;
   end loop;  
 return(Result);
end CheckUserRoles;
Там где жирно, там не нравится. PLS-00201
В Command Window пишет, что функция создалась с ошибками.


 
evvcom ©   (2006-09-07 17:17) [8]

> [7] tytus   (07.09.06 17:11)

Дык, у тебя прямые полномочия должны быть на эту sys.dba_role_privs (не через роль!)


 
ANB ©   (2006-09-07 17:24) [9]


> sys.dba_role_privs

Ну и нафига ? На dba_% вьюхи надо прямые гранты хозяину твоей процедуры давать.

Кстати, кроме user_tab_privs есть еще all_tab_privs. Никаких проблем через нее работать.


 
tytus   (2006-09-07 17:25) [10]

>evvcom
а как сие сотворить?
Править пользователя -> Object Privileges или System Privileges?


 
ANB ©   (2006-09-07 17:25) [11]

Да и table_privileges автоматически выдает инфу от пользователя, под которым ты хранимку выполняешь.


 
tytus   (2006-09-07 17:28) [12]

>ANB
grant dba to ADMIN with admin option; уже было. Это ОНО?


 
tytus   (2006-09-07 17:41) [13]

>
добавил select_any_table в System Privileges - прошло.


 
ANB ©   (2006-09-07 18:03) [14]


> tytus   (07.09.06 17:41) [13]

Хренью занимаешься


 
ANB ©   (2006-09-07 18:13) [15]

CREATE OR REPLACE FUNCTION getprivtablesel (p_table_name VARCHAR2)
  RETURN VARCHAR2
IS
  v_r   VARCHAR2 (2);
BEGIN
  SELECT MIN (select_priv)
    INTO v_r
    FROM table_privileges
   WHERE owner = "ANB" AND table_name = UPPER (p_table_name);

  RETURN v_r;
END;


 
ANB ©   (2006-09-07 18:13) [16]

Заюзать :

select ANB.getprivtablesel("table1") from dual



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.063 c
2-1161111936
DROWSY
2006-10-17 23:05
2006.11.05
Ретро вопрос. :)


15-1160387840
Iamdanil
2006-10-09 13:57
2006.11.05
Задача по математике - помогите!


2-1161067677
morda
2006-10-17 10:47
2006.11.05
MySQL


15-1161242512
Серьезный Сэм
2006-10-19 11:21
2006.11.05
Общий доступ


2-1161451266
GunGarry
2006-10-21 21:21
2006.11.05
Эмулировать нажатие заданной клавиши в активном приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский