Предоставить пользователю права доступа к базе данных
Я хочу предоставить избранную привилегию конкретному пользователю в 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.