我需要将特定用户拥有的所有表的授予选择权授予另一个用户。我能做到这一点与沿线的一个命令:授予特定用户拥有的所有表上的选择
Grant Select on OwningUser.* to ReceivingUser
还是我沿着线的东西来为每个表的SQL:
Select 'GRANT SELECT ON OwningUser.'||Table_Name||'TO ReceivingUser'
From All_Tables Where Owner='OWNINGUSER'
我需要将特定用户拥有的所有表的授予选择权授予另一个用户。我能做到这一点与沿线的一个命令:授予特定用户拥有的所有表上的选择
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;
是,其可能的,运行这个命令:
可以说你有用户名为thoko
grant select any table, insert any table, delete any table, update any table to thoko;
注:在Oracle数据库工作
这将授予它在所有模式,并将需要一个系统特权,以授予此 – Petr 2014-01-31 11:59:56
表+观点+错误报告
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;
/
从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;
另外`for v in(seleclec OWNER ='XXX')循环中ALL_VIEWS的OW_NAME,VIEW_NAME – gavenkoa 2014-05-07 15:00:43