Grant all privileges to user on Oracle schema

前端 未结 2 1020
忘掉有多难
忘掉有多难 2021-02-06 09:14

Is there a way to grant all privileges to a user on Oracle schema? I tried the following command but it only grants permission on specific tables in a schema. What I want is to

相关标签:
2条回答
  • 2021-02-06 10:05

    You can do it in a loop and grant by dynamic SQL:

    BEGIN
       FOR objects IN
       (
             SELECT 'GRANT ALL ON "'||owner||'"."'||object_name||'" TO MyUser' grantSQL
               FROM all_objects
              WHERE owner = 'MY_SCHEMA'
                AND object_type NOT IN
                    (
                       --Ungrantable objects.  Your schema may have more.
                       'SYNONYM', 'INDEX', 'INDEX PARTITION', 'DATABASE LINK',
                       'LOB', 'TABLE PARTITION', 'TRIGGER'
                    )
           ORDER BY object_type, object_name
       ) LOOP
          BEGIN
             EXECUTE IMMEDIATE objects.grantSQL;
          EXCEPTION WHEN OTHERS THEN
             --Ignore ORA-04063: view "X.Y" has errors.
             --(You could potentially workaround this by creating an empty view,
             -- granting access to it, and then recreat the original view.) 
             IF SQLCODE IN (-4063) THEN
                NULL;
             --Raise exception along with the statement that failed.
             ELSE
                raise_application_error(-20000, 'Problem with this statement: ' ||
                   objects.grantSQL || CHR(10) || SQLERRM);
             END IF;
          END;
       END LOOP;
    END;
    /
    
    0 讨论(0)
  • 2021-02-06 10:09

    If you want to grant privileges to all tables in a specific schema:

        BEGIN
        FOR x IN (select *from all_tables where OWNER = 'schema name')
        LOOP   
         EXECUTE IMMEDIATE 'GRANT SELECT ON '||x.OWNER||'.'|| x.table_name || TO 'user name'; 
        END LOOP;
        END;
    
    0 讨论(0)
提交回复
热议问题