【问题标题】:How to create a user in Oracle 11g and grant permissions如何在Oracle 11g 中创建用户并授予权限
【发布时间】:2023-04-08 16:47:01
【问题描述】:

有人可以告诉我如何在 Oracle 11g 中创建一个用户,并且只授予该用户执行一个特定存储过程和该过程中的表的能力。

我真的不知道该怎么做!

【问题讨论】:

    标签: oracle oracle11g access-control


    【解决方案1】:

    以 SYSTEM 身份连接。

    CREATE USER username IDENTIFIED BY apassword;
    
    GRANT CONNECT TO username;
    
    GRANT EXECUTE on schema.procedure TO username;
    

    您可能还需要:

    GRANT SELECT [, INSERT] [, UPDATE] [, DELETE] on schema.table TO username;
    

    到程序使用的任何表。

    【讨论】:

    【解决方案2】:

    按照以下步骤在 Oracle 中创建用户。
    --以系统用户身份连接

    CONNECT <USER-NAME>/<PASSWORD>@<DATABASE NAME>;
    

    --创建用户查询

    CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;
    

    --提供角色

    GRANT CONNECT,RESOURCE,DBA TO <USER NAME>;
    

    --提供权限

    GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <USER NAME>;
    GRANT UNLIMITED TABLESPACE TO <USER NAME>;
    

    --提供对表的访问。

    GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;
    

    【讨论】:

    【解决方案3】:

    Oracle 文档全面、在线且免费。你应该学会使用它。您可以找到CREATE USER hereGRANT here 的语法,

    为了连接到数据库,我们需要授予用户the CREATE SESSION privilege

    要允许存储过程的新用户权限,我们需要授予 EXECUTE 权限。设保人必须是以下之一:

    • 过程所有者
    • 使用 WITH ADMIN 选项授予用户执行该过程的权限
    • 具有 GRANT ANY OBJECT 权限的用户
    • DBA 或其他超级用户帐户。

    请注意,我们通常不需要授予存储过程使用的对象的权限才能使用该过程。默认权限是我们以与过程所有者相同的权限执行过程,并且在执行过程时继承他们的权限。这包含在 AUTHID 子句中。默认值为定义者(即过程所有者)。只有当 AUTHID 设置为 CURRENT_USER(调用者,即我们的新用户)时,我们才需要授予过程使用的对象的权限。 Find out more

    【讨论】:

      【解决方案4】:

      请勿在 TEST 和 PROD 等关键环境中使用这些方法。以下步骤仅建议用于本地环境。对于我的本地主机,我通过以下步骤创建用户:

      重要提示:使用系统用户凭据创建您的用户。否则,当您在同一数据库上运行多个应用程序时可能会遇到问题。

       CONNECT SYSTEM/<<System_User_Password>>@<<DatabaseName>>; -- connect db with username and password, ignore if you already connected to database.
      

      然后运行下面的脚本

      CREATE USER <<username>> IDENTIFIED BY <<password>>; -- create user with password
      GRANT CONNECT,RESOURCE,DBA TO <<username>>; -- grant DBA,Connect and Resource permission to this user(not sure this is necessary if you give admin option)
      GRANT CREATE SESSION TO <<username>> WITH ADMIN OPTION; --Give admin option to user
      GRANT UNLIMITED TABLESPACE TO <<username>>; -- give unlimited tablespace grant
      

      编辑:如果您遇到有关 oracle ora-28001 的问题,密码已过期,这也很有用运行

      select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
      ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED
      
      【解决方案5】:

      正如之前在 cmets 中多次提到的,Oracle 不鼓励使用 CONNECTRESOURCEDBA 角色。

      您必须以 SYS 身份连接才能创建您的角色和被赋予该角色的用户。您可以根据需要使用 SQL Developer 或 SQL*Plus。不要忘记在登录字符串中提及 SYSDBA 角色。 connect_identifier 使用不同的语法。

      sqlplus sys/<<password>>@<<connect_identifier>> as sysdba
      

      假设您有一个 12cR1,就像作为带有“Oracle Technology Network Developer Day”的 VM 提供的那个一样。连接字符串可能是(连接到提供的 PDB):

      sqlplus sys/oracle@127.0.0.1/orcl as sysdba
      sqlplus sys@"127.0.0.1/orcl" as sysdba -- to avoid putting the pw in clear
      

      请注意,在 Unix 下,引号必须被转义,否则它们将被 shell 使用。因此" 变为\"

      然后您创建角色MYROLE并授予它其他角色或权限。我添加了几乎最低限度的东西来做一些有趣的事情:

      create role myrole not identified;
      grant create session to myrole;
      grant alter session to myrole;
      grant create table to myrole;
      

      接下来创建用户MYUSERidentified by 后面的字符串是密码,区分大小写。其余的不是。您还可以使用 SQL 分隔标识符(由引号 " 包围)而不是转换为大写并受到一些限制的常规标识符。配额可以是unlimited 而不是20m

      create user myuser identified by myuser default tablespace users profile default account unlock;
      alter user myuser quota 20m on users;
      grant myrole to myuser;
      

      最终,您以新用户的身份连接。

      请注意,您还可以更改默认配置文件或提供另一个配置文件来自定义某些设置,例如密码的有效期、允许的失败登录尝试次数等。

      【讨论】:

        【解决方案6】:
        【解决方案7】:
        CREATE USER books_admin IDENTIFIED BY MyPassword;
        GRANT CONNECT TO books_admin;
        GRANT CONNECT, RESOURCE, DBA TO books_admin;
        GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
        GRANT UNLIMITED TABLESPACE TO books_admin;
        GRANT SELECT, INSERT, UPDATE, DELETE ON schema.books TO books_admin;
        

        https://docs.oracle.com/cd/B19306_01/network.102/b14266/admusers.htm#i1006107 https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant-permissions-in-oracle/

        【讨论】:

        • -1 这是谷歌上最好的结果之一,但它是最糟糕的建议。此示例使用户成为具有完全权限的 dba。这是“如何放弃对数据库的控制”
        【解决方案8】:

        第一步:

        Connect to a database using System/Password;

        第二步:

        创建由密码标识的用户用户名; (语法)

        Ex: create user manidb idntified by mypass;

        第三步:

        将连接、资源授予用户名; (语法)

        Ex: grant connect,resource to manidb;

        【讨论】:

          【解决方案9】:
          • 第 1 步。

            create user raju identified by deshmukh;

          • 第 2 步。

            grant connect , resource to raju;

          • 第 3 步。

            grant unlimitted tablespace to raju;

          • 第四步。

            grant select , update , insert , alter to raju;

          猜你喜欢
          • 2012-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-08
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          相关资源
          最近更新 更多