<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle &#8211; REONTOSANTA</title>
	<atom:link href="https://knowledge.reontosanta.com/archives/category/database/oracle/feed" rel="self" type="application/rss+xml" />
	<link>https://knowledge.reontosanta.com</link>
	<description>Collection of personal knowledge</description>
	<lastBuildDate>Mon, 09 Apr 2018 05:51:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<atom:link rel='hub' href='https://knowledge.reontosanta.com/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">83369280</site>	<item>
		<title>Oracleでのデータベースリンクの利用とシノニムの活用</title>
		<link>https://knowledge.reontosanta.com/archives/916</link>
					<comments>https://knowledge.reontosanta.com/archives/916#respond</comments>
		
		<dc:creator><![CDATA[mogice]]></dc:creator>
		<pubDate>Tue, 19 Apr 2016 00:37:15 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">http://knowledge.reontosanta.com/?p=916</guid>

					<description><![CDATA[Oracleでは、他のデータベースにアクセスする手段としてデータベー&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[<p>Oracleでは、他のデータベースにアクセスする手段としてデータベースリンクがある。<br />
データベースリンクを利用することで、他のデータベース上のテーブルに対してデータの操作を行うことができる。</p>
<p>&nbsp;</p>
<h2>データベースリンクの作成</h2>
<p>以下のコマンドを実行することでデータベースリンクの作成ができる。<br />
※接続先Oracleの接続名（ネットサービス名）は、&#8221;&#8216;&#8221;(シングルクォーテーション)で囲う必要がある。</p><pre class="urvanov-syntax-highlighter-plain-tag">CREATE DATABASE LINK DB_LINK      --データベースリンク名
CONNECT TO USER_NAME              --接続先Oracleのユーザ名
IDENTIFIED BY PASSWORD            --接続先Oracleのパスワード
USING 'CONNECTION_NAME'           --接続先Oracleの接続名（ネットサービス名）</pre><p>尚、以下のSELECT文にてデータベースリンクの存在を確認できる。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT * FROM DBA_DB_LINKS</pre><p>&nbsp;</p>
<div class="knowl-content" style="margin-top: 40px;" id="knowl-1806065373"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="4196732648" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><h2>データベースリンク先のテーブルの指定</h2>
<p>&#8220;テーブル名@データベースリンク名&#8221;で対象テーブルにアクセスすることができる。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT * FROM TARGET_TABLE@DB_LINK</pre><p>&nbsp;</p>
<h2>シノニムを作成して簡潔にテーブルを指定</h2>
<p>シノニムを作成することで、通常のテーブルと同じように扱うことができる。</p><pre class="urvanov-syntax-highlighter-plain-tag">CREATE SYNONYM TARGET_TABLE --シノニム名
FOR TARGET_TABLE@DB_LINK    --テーブル名@データベースリンク名</pre><p>FROM句にシノニム名を指定することで、データベースリンク先のテーブルを参照できる。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT * FROM TARGET_TABLE</pre><p>&nbsp;</p>
<h2>シノニムの削除</h2>
<p>以下のコマンドでシノニムを削除できる。</p><pre class="urvanov-syntax-highlighter-plain-tag">DROP SYNONYM TARGET_TABLE --シノニム名</pre><p>&nbsp;</p>
<h2>データベースリンクの削除</h2>
<p>以下のコマンドでデータベースリンクを削除できる。</p><pre class="urvanov-syntax-highlighter-plain-tag">DROP DATABASE LINK DB_LINK  --データベースリンク名</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<div class="knowl-after-content-ad" style="margin-top: 40px;" id="knowl-2620935095"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="2719999442" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><div class="knowl-after-content-relation" id="knowl-673214704"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="7848218644" 
data-ad-format="autorelaxed"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://knowledge.reontosanta.com/archives/916/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">916</post-id>	</item>
		<item>
		<title>Oracleで暗号化パッケージを利用する</title>
		<link>https://knowledge.reontosanta.com/archives/913</link>
					<comments>https://knowledge.reontosanta.com/archives/913#respond</comments>
		
		<dc:creator><![CDATA[mogice]]></dc:creator>
		<pubDate>Mon, 04 Apr 2016 14:01:40 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">http://knowledge.reontosanta.com/?p=913</guid>

					<description><![CDATA[Oracle(10g以降)のDBMS_CRYPTO.ENCRYPT／&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[<p>Oracle(10g以降)のDBMS_CRYPTO.ENCRYPT／DBMS_CRYPTO.DECRYPTを使用してデータの暗号化・復号化を実現できる。</p>
<p>&nbsp;</p>
<h2>事前準備</h2>
<p>DBMS_CRYPTOを利用するには、実行権限が必要となる為、SYSユーザーでログインして権限を付与する。</p><pre class="urvanov-syntax-highlighter-plain-tag">GRANT EXECUTE ON DBMS_CRYPTO TO user_name;</pre><p>&nbsp;</p>
<div class="knowl-content" style="margin-top: 40px;" id="knowl-2297013626"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="4196732648" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><h2>暗号化</h2>
<p>以下のサンプルでは、文字列を暗号化した結果をbase64でエンコードしてVARCHAR2に変換した値を返している。</p><pre class="urvanov-syntax-highlighter-plain-tag">暗号化SQL
SELECT
  UTL_RAW.CAST_TO_VARCHAR2( --VARCHAR2に変換
    UTL_ENCODE.BASE64_ENCODE( --base64でエンコード
      DBMS_CRYPTO.ENCRYPT( --暗号化
        UTL_I18N.STRING_TO_RAW ('1', 'AL32UTF8'), --ROWデータに変換
        8 + 256 + 4096, --暗号化方式+暗号ブロック連鎖+データ補完(AES256/CBC/PKCS5)
        UTL_I18N.STRING_TO_RAW(RPAD('mypassword', 32, CHR(0)), 'AL32UTF8') --パスワード(ROWデータに変換)
      )
    )
  ) AS encryption
FROM dual;</pre><p>実行結果</p><pre class="urvanov-syntax-highlighter-plain-tag">ENCRYPTION
--------------------------
00705BMd3YpkaeZxCq4nlg==</pre><p>&nbsp;</p>
<h2>復号化</h2>
<p>以下のサンプルでは、base64でエンコードされた暗号化文字列を復号化してVARCHAR2に変換した値を返している。</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
  UTL_I18N.RAW_TO_CHAR( --VARCHAR2に変換
    DBMS_CRYPTO.DECRYPT( --復号化
      UTL_ENCODE.BASE64_DECODE( --base64でデコード
        UTL_RAW.CAST_TO_RAW('00705BMd3YpkaeZxCq4nlg==') --ROWデータに変換
      ),
      8 + 256 + 4096, --暗号化方式+暗号ブロック連鎖+データ補完(AES256/CBC/PKCS5)
      UTL_I18N.STRING_TO_RAW(RPAD('mypassword', 32, CHR(0)), 'AL32UTF8') --パスワード(ROWデータに変換)
    )
    , 'AL32UTF8'
  ) AS decryption
FROM dual;</pre><p>実行結果</p><pre class="urvanov-syntax-highlighter-plain-tag">DECRYPTION
--------------------------
1</pre><p>&nbsp;</p>
<h2>暗号化／復号化のストアドファンクション</h2>
<p>ストアドファンクションの作成</p><pre class="urvanov-syntax-highlighter-plain-tag">-- 暗号化ファンクション
CREATE OR REPLACE FUNCTION AES256_ENCRYPT(
  P_TEXT      VARCHAR2, --暗号化対象文字列
  P_PASSWORD  VARCHAR2  --パスワード
)
RETURN VARCHAR2
IS
  vEncrypted  RAW(2000);
BEGIN
  --暗号化
  vEncrypted := DBMS_CRYPTO.ENCRYPT(
    --暗号化対象文字列(ROWデータに変換)
    src =&gt; UTL_I18N.STRING_TO_RAW (P_TEXT,  'AL32UTF8'),
    --暗号化方式+暗号ブロック連鎖+データ補完(AES256/CBC/PKCS5)
    typ =&gt; DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
    --パスワード(ROWデータに変換)
    key =&gt; UTL_I18N.STRING_TO_RAW(RPAD(P_PASSWORD, 32, CHR(0)), 'AL32UTF8'));
  --暗号化した値をbase64でエンコードしてVARCHAR2に変換して復帰
  RETURN UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(vEncrypted));
END;
/
-- 復号化ファンクション
CREATE OR REPLACE FUNCTION AES256_DECRYPT(
  P_ENCRYPTED  VARCHAR2, --復号化対象文字列
  P_PASSWORD   VARCHAR2  --パスワード
)
RETURN VARCHAR2
IS
  vRaw  RAW(2000);
BEGIN
  --暗号化文字列をbase64でデコード
  vRaw := UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(P_ENCRYPTED));
  --復号化
  vRaw := DBMS_CRYPTO.DECRYPT(
    --復号化対象
    src =&gt; vRaw,
    --暗号化方式+暗号ブロック連鎖+データ補完(AES256/CBC/PKCS5)
    typ =&gt; DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
    --パスワード
    key =&gt; UTL_I18N.STRING_TO_RAW(RPAD(P_PASSWORD, 32, CHR(0)), 'AL32UTF8'));
  --復号化した値をVARCHAR2に変換して復帰
  RETURN UTL_I18N.RAW_TO_CHAR (vRaw, 'AL32UTF8');
END;
/</pre><p>ストアドファンクションの実行結果</p><pre class="urvanov-syntax-highlighter-plain-tag">SQL&gt; SELECT AES256_ENCRYPT('1', 'mypassword') FROM dual;

AES256_ENCRYPT('1','MYPASSWORD')
--------------------------------------------------------------------------------
00705BMd3YpkaeZxCq4nlg==

SQL&gt; SELECT AES256_DECRYPT('00705BMd3YpkaeZxCq4nlg==', 'mypassword') FROM dual;

AES256_DECRYPT('00705BMD3YPKAEZXCQ4NLG==','MYPASSWORD')
--------------------------------------------------------------------------------
1</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<div class="knowl-after-content-ad" style="margin-top: 40px;" id="knowl-3110475876"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="2719999442" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><div class="knowl-after-content-relation" id="knowl-370683101"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="7848218644" 
data-ad-format="autorelaxed"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://knowledge.reontosanta.com/archives/913/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">913</post-id>	</item>
	</channel>
</rss>
