(8.0.28)
結論:
・対象テーブルのdrop権限
・対象テーブルのcreate権限
・対象テーブルのalter権限
・対象テーブルのinsert権限
・対象テーブルのselect権限
・対象データベースのlock tables権限
-- 動作確認
drop user 'user1'@'%';
create user 'user1'@'%' identified by 'user1';
grant drop on test.tab1 to 'user1'@'%';
grant create on test.tab1 to 'user1'@'%';
grant lock tables on test.* to 'user1'@'%';
grant insert on test.tab1 to 'user1'@'%';
grant select on test.tab1 to 'user1'@'%';
grant alter on test.tab1 to 'user1'@'%';
mysql -u user1 -h localhost -p test
source tab1.sql
(19c)
-- ①自スキーマのデータをインポート
前提:
インポート実行ユーザ → user1
インポート対象データ → user1
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・CREATE TABLE システム権限
・ディレクトリオブジェクトへの読み書き権限
-- 動作確認
CONNECT SYS@pdb1 AS SYSDBA
drop user user1 cascade;
create user user1 identified by user1;
grant create session to user1;
grant unlimited tablespace to user1;
grant create table to user1;
grant read,write on directory ORA_DIR to user1;
!impdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1
-- ②別スキーマのデータをインポート
前提:
インポート実行ユーザ → user2
インポート対象データ → user1
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_IMP_FULL_DATABASE ロール
・ディレクトリオブジェクトへの読み書き権限
※DATAPUMP_IMP_FULL_DATABASE は IMP_FULL_DATABASE に下記6件を追加したもの
BACKUP ANY TABLE
CREATE TABLE
EXEMPT REDACTION POLICY
FLASHBACK ANY TABLE
READ ANY FILE GROUP
SELECT ANY SEQUENCE
-- 動作確認
CONNECT SYS@pdb1 AS SYSDBA
drop user user1 cascade;
drop user user2 cascade;
create user user1 identified by user1;
create user user2 identified by user2;
grant create session to user1;
grant create session to user2;
grant unlimited tablespace to user1;
grant create table to user1;
grant unlimited tablespace to user2;
grant DATAPUMP_IMP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;
!impdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1
-- ③自スキーマのデータをインポート (DV環境)
前提:
インポート実行ユーザ → user1
インポート対象データ → user1
DV保護スキーマ → user1
レルム所有者 → user1
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・CREATE TABLE システム権限
・ディレクトリオブジェクトへの読み書き権限
・DBMS_MACADM.AUTHORIZE_DATAPUMP_USERで設定するDVでのインポート権限 (★ 12c非CDB の場合はレルム外のユーザの場合にだけ必要)
-- 動作確認
conn dbv_acctmgr/oracle@pdb1
drop user user1 cascade;
create user user1 identified by user1;
grant create session to user1;
conn dbv_owner/oracle@pdb1
select * from DVSYS.DBA_DV_REALM where NAME='realm1';
select * from DVSYS.DBA_DV_REALM_OBJECT where REALM_NAME='realm1';
select * from DVSYS.DBA_DV_REALM_AUTH where REALM_NAME='realm1';
BEGIN
DBMS_MACADM.DELETE_REALM(
realm_name => 'realm1');
END;
/
BEGIN
DBMS_MACADM.CREATE_REALM(
realm_name => 'realm1',
description => 'realm1',
enabled => DBMS_MACUTL.G_YES,
audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL + DBMS_MACUTL.G_REALM_AUDIT_SUCCESS,
realm_type => 1);
END;
/
BEGIN
DBMS_MACADM.ADD_OBJECT_TO_REALM(
realm_name => 'realm1',
object_owner => 'user1',
object_name => '%',
object_type => '%');
END;
/
BEGIN
DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'realm1',
grantee => 'user1',
auth_options => DBMS_MACUTL.G_REALM_AUTH_OWNER);
END;
/
select * from DVSYS.DBA_DV_DATAPUMP_AUTH;
EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('user1', 'user1');
EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('user1', 'user1');
CONNECT SYS@pdb1 AS SYSDBA
grant unlimited tablespace to user1;
grant create table to user1;
grant read,write on directory ORA_DIR to user1;
!impdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1
-- ④別スキーマのデータをインポート (DV環境)
前提:
インポート実行ユーザ → user2
インポート対象データ → user1
DV保護スキーマ → user1
レルム所有者 → user1
レルム参加者 → user2
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_IMP_FULL_DATABASE ロール
・ディレクトリオブジェクトへの読み書き権限
・DBMS_MACADM.AUTHORIZE_DATAPUMP_USERで設定するDVでのインポート権限
※DATAPUMP_IMP_FULL_DATABASE は IMP_FULL_DATABASE に下記6件を追加したもの
BACKUP ANY TABLE
CREATE TABLE
EXEMPT REDACTION POLICY
FLASHBACK ANY TABLE
READ ANY FILE GROUP
SELECT ANY SEQUENCE
-- 動作確認
conn dbv_acctmgr/oracle@pdb1
drop user user1 cascade;
drop user user2 cascade;
create user user1 identified by user1;
create user user2 identified by user2;
grant create session to user1;
grant create session to user2;
conn dbv_owner/oracle@pdb1
select * from DVSYS.DBA_DV_REALM where NAME='realm1';
select * from DVSYS.DBA_DV_REALM_OBJECT where REALM_NAME='realm1';
select * from DVSYS.DBA_DV_REALM_AUTH where REALM_NAME='realm1';
BEGIN
DBMS_MACADM.DELETE_REALM(
realm_name => 'realm1');
END;
/
BEGIN
DBMS_MACADM.CREATE_REALM(
realm_name => 'realm1',
description => 'realm1',
enabled => DBMS_MACUTL.G_YES,
audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL + DBMS_MACUTL.G_REALM_AUDIT_SUCCESS,
realm_type => 1);
END;
/
BEGIN
DBMS_MACADM.ADD_OBJECT_TO_REALM(
realm_name => 'realm1',
object_owner => 'user1',
object_name => '%',
object_type => '%');
END;
/
BEGIN
DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'realm1',
grantee => 'user1',
auth_options => DBMS_MACUTL.G_REALM_AUTH_OWNER);
END;
/
BEGIN
DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'realm1',
grantee => 'user2',
auth_options => DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT);
END;
/
select * from DVSYS.DBA_DV_DATAPUMP_AUTH;
EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('user2', 'user1');
EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('user2', 'user1');
CONNECT SYS@pdb1 AS SYSDBA
grant unlimited tablespace to user1;
grant create table to user1;
grant unlimited tablespace to user2;
grant DATAPUMP_IMP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;
!impdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1
(14)
-- ①テーブルオーナとインポート実行ユーザが同じ
前提:
スキーマ名 → schema1
テーブルオーナ → user1
インポート実行ユーザ → user1
結論:
スキーマレベルのUSAGE権限
スキーマレベルのCREATE権限
-- 動作確認
\c test postgres mmm070
set search_path = 'schema1';
drop schema schema1 cascade;
drop owned by user1 cascade;
drop user user1;
create schema schema1;
create user user1 with login encrypted password 'user1';
grant create,usage on schema schema1 to user1;
\dn+
\du+
\c test user1 mmm070
set search_path = 'schema1';
\i tab1.sql
-- ②テーブルオーナとインポート実行ユーザが異なる
前提:
スキーマ名 → schema1
テーブルオーナ → user1
インポート実行ユーザ → user2
結論:
インポート実行ユーザがテーブルオーナのロールに所属していること
-- 動作確認
\c test postgres mmm070
set search_path = 'schema1';
drop schema schema1 cascade;
drop owned by user1 cascade;
drop owned by user2 cascade;
drop user user1;
drop user user2;
create schema schema1;
create user user1 with login encrypted password 'user1';
create user user2 with login encrypted password 'user2';
grant create,usage on schema schema1 to user1;
grant user1 to user2;
\dn+
\du+
\c test user2 mmm070
set search_path = 'schema1';
\i tab1.sql
(2019)
前提:
スキーマ名 → dbo
結論:
・対象テーブルのinsert権限
・対象テーブルのselect権限
-- 動作確認
use test
go
drop user user1;
go
use master
go
drop login user1;
create login user1 with password='user1', default_database=test, check_policy=off
go
use test
go
create user user1 for login user1 with default_schema=dbo;
go
drop table tab1;
go
create table tab1(col1 int);
go
grant insert on dbo.tab1 to user1;
grant select on dbo.tab1 to user1;
go
bcp test.dbo.tab1 in "C:\tab1.txt" -U user1 -P user1 -c -t,