Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Как получить привилегии поьзователя (допустим на 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
11-1138017649
Muxaspb
2006-01-23 15:00
2006.11.05
Как сделать просмотр миниатюр для картинок?


2-1161179621
Ol&Kot
2006-10-18 17:53
2006.11.05
Помогите написать прогу


15-1160931021
atruhin
2006-10-15 20:50
2006.11.05
Компонент меняющий свойство Font у всех компонентов на форме


15-1160828553
PHPDeveloper
2006-10-14 16:22
2006.11.05
Assembler


1-1159031806
GrayFace
2006-09-23 21:16
2006.11.05
Доступ к property в asm вставках