Форум: "Базы";
Текущий архив: 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.039 c