我使用oracle 12c。我尝试将所有表的所有权限授予用户。将来我不需要为该用户添加任何权限。我需要这样做。我不想将系统表授予该用户。我写了 pl/sql 命令。但它给出了错误。
BEGIN
2 FOR t IN (select * from dba_tables where owner not like '%SYS%' AND owner not like '%ADMIN%' AND iot_type IS NULL)
3 LOOP
4 EXECUTE IMMEDIATE 'GRANT ALL PRIVILEGES ON '|| t.owner ||'.' || t.table_name ||' TO GGSTEST';
5 END LOOP;
6 END;
7 /
BEGIN
*
ERROR at line 1:
ORA-00905: missing keyword
ORA-06512: at line 4
错误是什么?谢谢。
我使用 dbms_print
GRANT ALL ON OUTLN.OL$ TO GGSTEST
GRANT ALL ON OUTLN.OL$HINTS TO GGSTEST
GRANT ALL ON OUTLN.OL$NODES TO GGSTEST
GRANT ALL ON DBSNMP.BSLN_BASELINES TO GGSTEST
GRANT ALL ON APEX_040200.WWV_FLOW_LOG_HISTORY TO GGSTEST
GRANT ALL ON DBSNMP.BSLN_METRIC_DEFAULTS TO GGSTEST
GRANT ALL ON XDB.XDB$ROOT_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$XDB_READY TO GGSTEST
GRANT ALL ON XDB.XDB$CDBPORTS TO GGSTEST
GRANT ALL ON XDB.XDB$IMPORT_TT_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$TTSET TO GGSTEST
GRANT ALL ON XDB.XDB$H_INDEX TO GGSTEST
GRANT ALL ON XDB.XDB$D_LINK TO GGSTEST
GRANT ALL ON XDB.XDB$COLUMN_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$PATH_INDEX_PARAMS TO GGSTEST
GRANT ALL ON XDB.X$NM7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.X$QN7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.X$PT7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.APP_USERS_AND_ROLES TO GGSTEST
GRANT ALL ON XDB.APP_ROLE_MEMBERSHIP TO GGSTEST
GRANT ALL ON XDB.XDB$DBFS_VIRTUAL_FOLDER TO GGSTEST
BEGIN
*
ERROR at line 1:
ORA-00905: missing keyword
ORA-06512: at line 4
GRANT ALL PRIVILEGES ON ....
是 MySQL privs 语法。你需要做:
请参阅文档。
这是正确的命令。以前,由于 oracle 的安装表,它会出错。
问题是由于 PL/SQL 解释的字符,如美元符号或井号标签。通过添加双引号,您将不再收到错误消息。
问候。
为什么?
是的你将会。
添加另一个表后,您必须重复整个过程,并且必须为每个用户都这样做。我建议这不是对您时间的有效利用。
我们会同意不同意。
绝大多数用户不需要(或想要)任何表上的“所有权限” ;选择、插入、删除和更新是他们所需要的,也是他们应该得到的。
您将如何向您的管理层解释生产系统是如何发生故障的(无论您需要多长时间才能恢复它),因为某个用户在某个地方决定删除一个表,只是因为他们发现他们可以?这不是用户的责任,所以他们不应该首先拥有它的权限。
阅读角色。
将对象级权限授予角色,然后将该角色授予 [许多] 用户。当您修改表时,您只需 [重新] 授予相关角色的权限;Oracle 将负责将这些权限“级联”给相关用户。如果您需要不同用户组的不同“级别”权限,请创建多个角色。