如何在Oracle 11g 中创建用户并授予权限
Posted
技术标签:
【中文标题】如何在Oracle 11g 中创建用户并授予权限【英文标题】:How to create a user in Oracle 11g and grant permissions 【发布时间】:2012-03-15 21:23:37 【问题描述】:有人可以告诉我如何在 Oracle 11g 中创建一个用户,并且只授予该用户执行一个特定存储过程和该过程中的表的能力。
我真的不知道该怎么做!
【问题讨论】:
【参考方案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;
到程序使用的任何表。
【讨论】:
+1 但是,根据 Oracle 版本,CONNECT
角色的权限比名称所暗示的要多得多。我宁愿授予CREATE SESSION
。
我使用的版本是11g
"CONNECT, RESOURCE, and DBA These roles are provided for compatibility with previous versions ... Oracle recommends that you design your own roles for database security rather than relying on these roles. These roles may not be created automatically by future versions of Oracle Database."
您不必对任何表授予选择、插入、更新或删除权限。使用过程的要点之一是,您可以保持您的表“未授权”,并在过程级别控制对它们的访问。
"对 schema.procedure 授予用户名执行权限;"正在返回一条错误消息“第 1 行出现错误:ORA-04042:过程、函数、包或包主体不存在”【参考方案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>;
【讨论】:
在 Oracle 11g 中,是“grant dba”还是“grand sysdba”? ORA-00990: 'GRANT CREATE SESSION GRANT ANY PRIVILEGE TOCONNECT,RESOURCE,DBA
"These roles are provided for compatibility with previous versions of Oracle Database... Oracle recommends that you design your own roles for database security rather than relying on these roles. These roles may not be created automatically by future versions of Oracle Database."【参考方案3】:
Oracle 文档全面、在线且免费。你应该学会使用它。您可以找到CREATE USER here 和GRANT 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
【讨论】:
CONNECT,RESOURCE,DBA
"These roles are provided for compatibility with previous versions of Oracle Database... Oracle recommends that you design your own roles for database security rather than relying on these roles. These roles may not be created automatically by future versions of Oracle Database."【参考方案5】:
正如之前在 cmets 中多次提到的,Oracle 不鼓励使用 CONNECT
、RESOURCE
和 DBA
角色。
您必须以 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;
接下来创建用户MYUSER
。 identified 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】:CREATE USER USER_NAME IDENTIFIED BY PASSWORD;
GRANT CONNECT, RESOURCE TO USER_NAME;
【讨论】:
CONNECT,RESOURCE,DBA
"These roles are provided for compatibility with previous versions of Oracle Database... Oracle recommends that you design your own roles for database security rather than relying on these roles. These roles may not be created automatically by future versions of Oracle Database."【参考方案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;
【讨论】:
CONNECT,RESOURCE,DBA
"These roles are provided for compatibility with previous versions of Oracle Database... Oracle recommends that you design your own roles for database security rather than relying on these roles. These roles may not be created automatically by future versions of Oracle Database."以上是关于如何在Oracle 11g 中创建用户并授予权限的主要内容,如果未能解决你的问题,请参考以下文章