如何在 Oracle 11g 中创建用户并授予权限

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

我真的不知道该怎么做!

551631 次浏览

作为系统连接。

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;

程序所使用的表格。

Oracle 文档是全面的、在线的和免费的。你应该学会使用它。您可以找到 在这里创建用户我是 GRANT的语法,

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

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

  • 程序所有者
  • 授权用户使用 WITHADMIN 选项在该过程上执行
  • 具有授予任何对象特权的用户
  • DBA 或其他超级用户帐户。

注意,我们通常不需要为存储过程使用的对象授予权限就可以使用该过程。默认权限是,我们使用与过程所有者相同的权限执行过程,并且在执行过程时继承它们的权限。AUTHID 子句涵盖了这一点。默认值是 Definition (即过程所有者)。只有当 AUTHID 设置为 CURRENT _ USER (调用程序,即我们的新用户)时,我们才需要对过程使用的对象授予权限。进一步调查.

CREATE USER USER_NAME IDENTIFIED BY PASSWORD;
GRANT CONNECT, RESOURCE TO USER_NAME;

按照以下步骤在 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>;
  • 步骤1。

    create user raju identified by deshmukh;

  • 第二步。

    grant connect , resource to raju;

  • 步骤3。

    grant unlimitted tablespace to raju;

  • 第四步。

    grant select , update , insert , alter to raju;

不要在关键环境(如 TEST 和 PROD)中使用这些方法。以下步骤只是针对当地环境提出的建议。对于我的 localhost,我通过以下步骤创建用户:

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

 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

编辑: 如果您遇到有关 oracleora-28001的问题,密码已过期,这也可以是有用的运行

select * from dba_profiles;-- check PASSWORD_LIFE_TIME
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED

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

您必须以 SYS 的形式连接,以创建您的角色和给予这个角色的用户。您可以根据自己的喜好使用 SQLDeveloper 或 SQL * Plus。不要忘记在登录字符串中提到 SYSDBA 角色。connect_identifier使用不同的语法。

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

假设您有一个12cR1,就像“ 甲骨文技术网络开发者日”作为 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;

接下来创建用户 MYUSER。密码 identified by后面的字符串是区分大小写的。剩下的就不是了。您还可以使用 SQL 分隔标识符(由引号 "包围) ,而不是常规标识符,常规标识符是转换为 tu 大写并受到一些限制。配额可以是 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;

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

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

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/

第一步:

Connect to a database using System/Password;

第二步:

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

Ex: create user manidb idntified by mypass;

第三步:

授予连接,资源到用户名; (语法)

Ex: grant connect,resource to manidb;