有人可以告诉我如何在Oracle 11g中创建用户,并且只授予该用户执行一个特定存储过程和该过程中的表的能力。
我不确定该怎么做!
答案 0 :(得分:83)
以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 :(得分:25)
按照以下步骤在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>;
答案 2 :(得分:21)
Oracle文档全面,在线且免费。你应该学会使用它。您可以找到CREATE USER here和GRANT here,
的语法为了连接到数据库,我们需要授予用户the CREATE SESSION privilege。
要允许存储过程的新用户权限,我们需要授予EXECUTE特权。设保人必须是其中之一:
请注意,我们通常不需要为存储过程使用的对象授予权限以便使用该过程。默认权限是我们执行具有与过程所有者相同权限的过程,并且在执行过程时继承它们的权限。这由AUTHID子句涵盖。默认值是definer(即过程所有者)。只有当AUTHID设置为CURRENT_USER(调用者,即我们的新用户)时,我们才需要授予该过程使用的对象的权限。 Find out more。
答案 3 :(得分:10)
不要在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
编辑: 如果您遇到有关oracle ora-28001的问题,密码已过期,这也可以运行
select * from dba_profiles;-- check PASSWORD_LIFE_TIME
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED
答案 4 :(得分:4)
正如前面在评论中多次提到的那样,Oracle不鼓励使用CONNECT
,RESOURCE
和DBA
角色。
您必须以SYS身份连接以创建您的角色以及获得此角色的用户。您可以根据需要使用SQL Developer或SQL * Plus。不要忘记在登录字符串中提及SYSDBA角色。 connect_identifier
使用不同的语法。
sqlplus sys/<<password>>@<<connect_identifier>> as sysdba
让我们假设你有一个12cR1,就像那个提供了&#34; Oracle Technology Network Developer Day&#34;的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;
最后,您以新用户身份进行连接。
请注意,您还可以更改默认配置文件或提供另一个配置文件来自定义某些设置,如密码的有效期,允许的登录尝试失败次数等。
答案 5 :(得分:2)
CREATE USER USER_NAME IDENTIFIED BY PASSWORD;
GRANT CONNECT, RESOURCE TO USER_NAME;
答案 6 :(得分:0)
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/
答案 7 :(得分:0)
第一步:
Connect to a database using System/Password;
第二步:
创建由密码标识的用户名; (语法)
Ex: create user manidb idntified by mypass;
第三步:
授予连接,资源为用户名; (语法)
Ex: grant connect,resource to manidb;
答案 8 :(得分:-4)
第1步。
create user raju identified by deshmukh;
第2步。
grant connect , resource to raju;
第3步。
grant unlimitted tablespace to raju;
步骤4。
grant select , update , insert , alter to raju;