【发布时间】:2012-08-29 13:48:12
【问题描述】:
我想向 Oracle 中的特定用户授予选择权限。它可以在 mysql 中使用以下查询
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED
BY 'password';
有什么方法可以在 Oracle 中实现这一点?
【问题讨论】:
-
-1 表示没有研究工作:|
我想向 Oracle 中的特定用户授予选择权限。它可以在 mysql 中使用以下查询
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED
BY 'password';
有什么方法可以在 Oracle 中实现这一点?
【问题讨论】:
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。这使您可以轻松地将相同的角色分配给组织中需要相同权限集的每个人,而不是为m 用户管理n 对象的权限。
【讨论】:
是的,它带有 GRANT 语句: GRANT in Oracle documentation
您必须首先使用CREATE USER 创建一个用户。
【讨论】:
create user声明;如果您 grant 使用 identified by 子句,则如果用户不存在,则将创建该用户。那是您链接到的mentioned in the documentation。但是正如贾斯汀指出的那样,您不能对模式中的所有对象进行全局授权。最接近的可能是授予具有所有必需权限的角色。