我想为Oracle中的特定用户授予select权限。它可以在mysql中使用以下查询
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED
BY 'password';
我们有什么办法可以在Oracle中实现这一目标吗?
答案 0 :(得分: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触发器可以提交一个作业,该作业将在创建新对象时自动授予权限但不特别推荐。
从可管理性的角度来看,您通常会创建一个将分配所有这些权限的角色,然后assign that role to whatever set of users actually need those DML privileges。这使您可以轻松地为组织中需要相同权限集的每个人分配相同的角色,而不是为n
个用户管理m
个对象的权限。
答案 1 :(得分:0)
是的,是GRANT声明: GRANT in Oracle documentation
您必须先使用CREATE USER创建用户。