Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grant all privileges to user on Oracle schema

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 give this user all permissions on a given schema.

GRANT ALL ON MyTable TO MyUser;
like image 402
Frank Martin Avatar asked Dec 08 '14 07:12

Frank Martin


People also ask

How do you grant all the privileges on the table to the user?

Use the ALL PRIVILEGES privilege type to grant all of the privileges to the user or role for the specified table. You can also grant one or more table privileges by specifying a privilege-list. Use the DELETE privilege type to grant permission to delete rows from the specified table.


2 Answers

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;
/
like image 197
Wernfried Domscheit Avatar answered Oct 11 '22 03:10

Wernfried Domscheit


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;
like image 42
user2372670 Avatar answered Oct 11 '22 04:10

user2372670