对特定用户的Oracle只读访问

对特定用户的Oracle只读访问,oracle,Oracle,我有一个模式,其中有很多用户。对于开发,我想授予用户只读取表的权限,而没有操作数据库的权限。是否有任何命令将特定用户的访问权限设置为只读?您应该能够在MYSQL Workbench中进行配置。 我认为还有一种方法可以将此链接到Apex用户。正如Ed评论的那样,除非获得授权,否则不允许您做任何事情。对于只读用户,您只需在表上授予SELECT权限。如果您只有其中的几个,请手动执行。否则,创建一个过程来为您完成这项工作。这里有一个例子 这些是我的桌子: SQL> select * from ta

我有一个模式,其中有很多用户。对于开发,我想授予用户只读取表的权限,而没有操作数据库的权限。是否有任何命令将特定用户的访问权限设置为只读?

您应该能够在MYSQL Workbench中进行配置。
我认为还有一种方法可以将此链接到Apex用户。

正如Ed评论的那样,除非获得授权,否则不允许您做任何事情。对于只读用户,您只需在表上授予
SELECT
权限。如果您只有其中的几个,请手动执行。否则,创建一个过程来为您完成这项工作。这里有一个例子

这些是我的桌子:

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
LINKS                          TABLE
SALGRADE                       TABLE
在“我的模式”中的所有表中循环并将
SELECT
授予作为参数传递的用户的过程:

SQL> create or replace procedure p_grant_ro(par_user in varchar2) is
  2    l_str varchar2(200);
  3  begin
  4    for cur_r in (select table_name from user_tables
  5                  order by table_name
  6                 )
  7    loop
  8      l_str := 'grant select on ' || cur_r.table_name ||
  9               ' to ' || dbms_assert.schema_name(par_user);
 10      dbms_output.put_line(l_str);
 11      execute immediate(l_str);
 12    end loop;
 13  end;
 14  /

Procedure created.
测试:

SQL> set serveroutput on;
SQL> exec p_grant_ro('MIKE');
grant select on BONUS to MIKE
grant select on DEPT to MIKE
grant select on EMP to MIKE
grant select on LINKS to MIKE
grant select on SALGRADE to MIKE

PL/SQL procedure successfully completed.

SQL>

如果您想知道
dbms\u assert
函数调用的目的是什么:防止可能的SQL注入。函数注意参数是否为现有架构名称

SQL> exec p_grant_ro('TECH_DELHI');
BEGIN p_grant_ro('TECH_DELHI'); END;

*
ERROR at line 1:
ORA-44001: invalid schema
ORA-06512: at "SYS.DBMS_ASSERT", line 266
ORA-06512: at "SCOTT.P_GRANT_RO", line 8
ORA-06512: at line 1


SQL>

你使用哪个数据库?MySQL还是Oracle?不,你没有“一个模式和很多用户”。用户不在架构中。用户拥有自己的模式。User=owner=schema。现在,请回答你的问题——在甲骨文中,一切都是被禁止的,除非特别授权。如果希望给定用户对另一个用户(架构)的表具有只读访问权限,则不要授予该用户除“在其他_user.table_名称上选择”之外的任何权限。我的评论直接指向甲骨文。由于您已经标记了两个不同的rdbms产品,我们不知道您真正想问的是哪一个。@Littlefoot OracleDatabase@jps毫无疑问brother@Tech_Delhi:您将其标记为mysql(以及C#),因此当答案不符合您的需要时,不要感到惊讶。Oracle的正确答案应该和mysql的答案一样容易找到。