如何使用与 oracle 中现有帐户相同的权限复制模式?

Raj*_*esh 1 sql oracle privileges schema

在用于 IT 客户的 Oracle 票证操作/请求中,我们通常会收到这样的请求,即复制具有其他用户拥有的相同权限的用户帐户。或者你可以说在这个或那个用户帐户之后授予我的模型 ID。所以这里是简单的伪代码来实现这一点。

tha*_*ith 7

在 Oracle SQL Developer 中,打开 DBA、安全性和用户部分。

选择您的帐户。

右键点击。

选择,创造喜欢。

切换“复制对象权限”

在此处输入图片说明

提供新的用户名/密码。

瞧。

转到 SQL 页面,查看我们为您从数据字典中提取的代码。

它获得了配额、角色、系统权限和对象权限。

在此处输入图片说明

在 18.1 版中,您也可以只打开用户并转到 SQL 页面并复制/粘贴/替换那里提供的代码中的架构名称。

在此处输入图片说明

唉! (我听到你说,我需要代码才能做到这一点。)

通过在 SQL Developer 中打开 Log 面板并单击 Statements 页面,您可以看到我们用来从 DB 获取此信息的 SQL。

这是代码:

select M.NAME,
       decode(
    NVL(
        S.ADMIN_OPTION,
        'NULL'
    ),
    'NO',
    'YES',
    'NULL',
    'NO',
    'YES'
) GRANTED,
       NVL(
    ADMIN_OPTION,
    'NO'
) ADMIN
  from SYSTEM_PRIVILEGE_MAP M,
       (
    select *
      from DBA_SYS_PRIVS
     where (
        GRANTEE   =?
            or ?         = null
    )
) S
 where S.PRIVILEGE (+)   = M.NAME
 order by 1;

select R.ROLE,
       decode(
    S.NAME,
    R.ROLE,
    'YES',
    'NO'
) GRANTED,
       NVL(
    S.ADMIN,
    'NO'
) ADMIN,
       NVL(
    S.DEF,
    'NO'
) DEF
  from DBA_ROLES R,
       (
    select GRANTED_ROLE NAME,
           ADMIN_OPTION ADMIN,
           DEFAULT_ROLE DEF
      from DBA_ROLE_PRIVS
     where GRANTEE   =?
) S
 where S.NAME (+)   = R.ROLE
   and R.AUTHENTICATION_TYPE != 'GLOBAL'
 order by 1;

select OWNER,
       TABLE_NAME,
       PRIVILEGE,
       GRANTABLE
  from DBA_TAB_PRIVS
 where GRANTEE   =?;

select ACCOUNT_STATUS,
       DEFAULT_TABLESPACE DEF,
       TEMPORARY_TABLESPACE TEMP,
       PASSWORD,
       EXTERNAL_NAME,
       EDITIONS_ENABLED,
       ALL_SHARD
  from DBA_USERS
 where USERNAME   =?;

select T.TABLESPACE_NAME,
       NVL(
    Q.UNLIMITED,
    'NO'
) UNLIMITED,
       Q.QUOTA,
       Q.UNIT,
       T.CONTENTS
  from DBA_TABLESPACES T,
       (
    select TABLESPACE_NAME,
           decode(
        MAX_BYTES,
        -1,
        'YES',
        'NO'
    ) UNLIMITED,
           decode(
        MAX_BYTES,
        -1,
        null,
        MAX_BYTES / 1024
    ) QUOTA,
           'K' UNIT
      from DBA_TS_QUOTAS
     where (
        USERNAME   =:1
            or :1         = null
    )
) Q
 where Q.TABLESPACE_NAME (+)   = T.TABLESPACE_NAME
 order by 1;
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你做的这些!使添加新架构/用户变得非常容易。 (2认同)