Предоставить пользователю права доступа к базе данных

Я хочу предоставить избранную привилегию конкретному пользователю в Oracle. Это возможно в MySQL с помощью следующего запроса

GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED      
BY 'password';

Есть ли способ достичь этого в Oracle?

2 ответа

Решение

То, что MySQL называет "базой данных", больше похоже на то, что Oracle называет "схемой". Oracle не имеет возможности предоставлять привилегии для всех объектов в схеме конкретному пользователю, вы должны предоставлять привилегии для каждого объекта в отдельности. Вы можете использовать немного динамического SQL, чтобы упростить начальный грант

BEGIN
  FOR x IN (SELECT *
              FROM dba_tables
             WHERE owner = <<name of schema>>)
  LOOP
    EXECUTE IMMEDIATE 'GRANT select, insert, delete ON ' || 
                         x.owner || '.' || x.table_name ||
                         ' TO <<username>>';
  END LOOP;
END;

Однако каждый раз, когда вы создаете новый объект в схеме, вам нужно либо предоставить пользователю те же самые привилегии для нового объекта, либо вам придется повторно запускать блок PL/SQL, описанный выше. Если вы действительно хотите, триггер DDL может отправить задание, которое автоматически предоставит привилегии при создании новых объектов, но это не особенно рекомендуется.

С точки зрения управляемости вы обычно создаете роль, которой будут назначены все эти привилегии, а затем назначаете эту роль любому набору пользователей, которому действительно нужны эти привилегии DML. Это позволяет вам легко назначать одну и ту же роль каждому сотруднику организации, которому необходим один и тот же набор привилегий, а не управлять привилегиями в n объекты для m пользователи.

Да, это с заявлением GRANT: GRANT в документации Oracle

Сначала вы должны создать пользователя с помощью CREATE USER.

Другие вопросы по тегам