반응형
특정 사용자가 소유한 모든 테이블에서 선택 허용
특정 사용자가 소유한 모든 테이블에 대한 선택 권한을 다른 사용자에게 부여해야 합니다.다음과 같은 단일 명령어로 이 작업을 수행할 수 있습니까?
Grant Select on OwningUser.* to ReceivingUser
또는 다음과 같은 방법으로 각 테이블에 대해 sql을 생성해야 합니다.
Select 'GRANT SELECT ON OwningUser.'||Table_Name||'TO ReceivingUser'
From All_Tables Where Owner='OWNINGUSER'
단 하나의 문장은 아니지만, Oracle을 통해 얻을 수 있는 것과 거의 비슷합니다.
BEGIN
FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='TheOwner') LOOP
EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to TheUser';
END LOOP;
END;
테이블 + 뷰 + 오류 보고서
SET SERVEROUT ON
DECLARE
o_type VARCHAR2(60) := '';
o_name VARCHAR2(60) := '';
o_owner VARCHAR2(60) := '';
l_error_message VARCHAR2(500) := '';
BEGIN
FOR R IN (SELECT owner, object_type, object_name
FROM all_objects
WHERE owner='SCHEMANAME'
AND object_type IN ('TABLE','VIEW')
ORDER BY 1,2,3) LOOP
BEGIN
o_type := r.object_type;
o_owner := r.owner;
o_name := r.object_name;
DBMS_OUTPUT.PUT_LINE(o_type||' '||o_owner||'.'||o_name);
EXECUTE IMMEDIATE 'grant select on '||o_owner||'.'||o_name||' to USERNAME';
EXCEPTION
WHEN OTHERS THEN
l_error_message := sqlerrm;
DBMS_OUTPUT.PUT_LINE('Error with '||o_type||' '||o_owner||'.'||o_name||': '|| l_error_message);
CONTINUE;
END;
END LOOP;
END;
/
네, 가능합니다.다음 명령을 실행합니다.
를 호출한 사용자가 있다고 가정합니다.thoko
grant select any table, insert any table, delete any table, update any table to thoko;
주의: Oracle 데이터베이스 작업
http://psoug.org/reference/roles.html, 에서 사용자가 실행할 수 있는 절차를 데이터베이스에 만듭니다.
CREATE OR REPLACE PROCEDURE GRANT_SELECT(to_user in varchar2) AS
CURSOR ut_cur IS SELECT table_name FROM user_tables;
RetVal NUMBER;
sCursor INT;
sqlstr VARCHAR2(250);
BEGIN
FOR ut_rec IN ut_cur
LOOP
sqlstr := 'GRANT SELECT ON '|| ut_rec.table_name || ' TO ' || to_user;
sCursor := dbms_sql.open_cursor;
dbms_sql.parse(sCursor,sqlstr, dbms_sql.native);
RetVal := dbms_sql.execute(sCursor);
dbms_sql.close_cursor(sCursor);
END LOOP;
END grant_select;
DECLARE
v_owner VARCHAR2(50) DEFAULT 'TEST1';
v_grantee VARCHAR2(50) DEFAULT 'TEST2';
BEGIN
FOR c IN (SELECT object_name FROM all_objects WHERE owner = v_owner and object_type = 'TABLE')
LOOP
BEGIN
EXECUTE IMMEDIATE 'GRANT SELECT ON ' || v_owner || '.' || c.object_name||' TO ' || v_grantee;
EXCEPTION when OTHERS THEN
DBMS_OUTPUT.PUT_LINE (c.object_name);
END;
END LOOP;
END;
/
언급URL : https://stackoverflow.com/questions/187886/grant-select-on-all-tables-owned-by-specific-user
반응형
'programing' 카테고리의 다른 글
클라이언트 측 객체 배열에서 최신 날짜를 얻는 우아한 방법은 무엇입니까? (0) | 2023.02.21 |
---|---|
jquery에서 외부 URL을 호출하는 방법 (0) | 2023.02.21 |
각을 사용하여 중첩된 양식 유효성 검사 건너뛰기JS (0) | 2023.02.21 |
AngularJS에서의 ng-binding이란 무엇입니까? (0) | 2023.02.21 |
Word press - 라디오 버튼 체크아웃 woocommerce 표시/숨기기 필수 필드 (0) | 2023.02.21 |