(8.0.28)
結論:
・対象テーブルのselect権限
・process権限
・対象データベースのlock tables権限
-- 動作確認
drop user 'user1'@'%';
create user 'user1'@'%' identified by 'user1';
drop table tab1;
create table tab1(col1 int);
insert into tab1 values(1);
select * from tab1;
grant select on test.tab1 to 'user1'@'%';
grant process on *.* to 'user1'@'%';
grant lock tables on test.* to 'user1'@'%';
\! mysqldump -u user1 -h localhost -p test tab1 > 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;
conn user1/user1@pdb1
create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;
!expdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes
-- ②別スキーマのデータをエクスポート
前提:
インポート実行ユーザ → user2
インポート対象データ → user1
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_EXP_FULL_DATABASE ロール
・ディレクトリオブジェクトへの読み書き権限
※DATAPUMP_EXP_FULL_DATABASEとEXP_FULL_DATABASEは中身は同じ
-- 動作確認
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_EXP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;
conn user1/user1@pdb1
create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;
!expdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes
-- ③自スキーマのデータをエクスポート (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;
conn user1/user1@pdb1
create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;
!expdp user1/user1@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes
-- ④別スキーマのデータをエクスポート (DV環境)
前提:
エクスポート実行ユーザ → user2
エクスポート対象データ → user1
DV保護スキーマ → user1
レルム所有者 → user1
レルム参加者 → user2
結論:
・CREATE SESSION システム権限
・UNLIMITED TABLESPACE システム権限
・DATAPUMP_EXP_FULL_DATABASE ロール
・ディレクトリオブジェクトへの読み書き権限
・DBMS_MACADM.AUTHORIZE_DATAPUMP_USERで設定するDVでのエクスポート権限
※DATAPUMP_EXP_FULL_DATABASEとEXP_FULL_DATABASEは中身は同じ
-- 動作確認
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_EXP_FULL_DATABASE to user2;
grant read,write on directory ORA_DIR to user2;
conn user1/user1@pdb1
create table user1.tab1(col1 int);
insert into user1.tab1 values(1);
commit;
select * from user1.tab1;
!expdp user2/user2@pdb1 directory=ORA_DIR dumpfile=tab1.dmp logfile=tab1.log tables=user1.tab1 reuse_dumpfiles=yes
(14)
-- ①テーブルオーナとpg_dump実行ユーザが同じ
前提:
スキーマ名 → schema1
テーブルオーナ → user1
pg_dump実行ユーザ → 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';
drop table schema1.tab1;
create table schema1.tab1(col1 int);
insert into schema1.tab1 values(1);
select * from schema1.tab1;
\! pg_dump -U user1 -h mmm070 -Fp -t schema1.tab1 test > tab1.sql
-- ②テーブルオーナとpg_dump実行ユーザが異なる
前提:
スキーマ名 → schema1
テーブルオーナ → user1
pg_dump実行ユーザ → user2
結論:
スキーマレベルのUSAGE権限
テーブルレベルのSELECT権限
-- 動作確認
\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 usage on schema schema1 to user2;
\dn+
\du+
\c test user1 mmm070
set search_path = 'schema1';
drop table schema1.tab1;
create table schema1.tab1(col1 int);
insert into schema1.tab1 values(1);
select * from schema1.tab1;
grant select on schema1.tab1 to user2;
\! pg_dump -U user2 -h mmm070 -Fp -t schema1.tab1 test > tab1.sql
(2019)
前提:
スキーマ名 → dbo
結論:
・対象テーブルの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);
insert into tab1 values(1);
select * from tab1;
go
grant select on dbo.tab1 to user1;
go
bcp test.dbo.tab1 out "C:\tab1.txt" -U user1 -P user1 -c -t,