Oracle Cloud Infrastructure 環境へのアクセスにまつわる小ネタ集

**この記事は [Oracle Cloud Advent Calendar 2018](https://adventar.org/calendars/3077) の 12/6 の記事として書かれています**

**以降、Oracle Cloud Infrastructureを略して「OCI」と表記します。**

# OCI上のDatabaseへのアクセス

まずはデータベース層への接続に関連して。
ここで言っている「OCI上のDatabase」とは、Oracle Cloud Infrastructure Database - Virtual Machines のことを指しています。

## Databaseユーザのパスワードチェックが厳しめ

パスワードチェックが厳格になっており、緩めのパスワードで create user すると、このようなエラーメッセージが表示されます。そして、言われたとおりに9文字以上を指定してもまた怒られてイラッとするかもしれません。

```
SQL> create user scott identified by tiger;
create user scott identified by tiger
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 9 bytes
```

パスワードは、**少なくとも2つの大文字・2つの小文字・2つの数値・2つの特殊文字(_, #, -)を含む、などのルール**があります（DBaaSインスタンス作成時に、管理者パスワードを指定する画面にもそんな指定があったことを覚えている方もいらっしゃるかと思います）。
このルールは、DBaaSインスタンスでは**ORA12C_STRONG_VERIFY_FUNCTION** が指定されていることに起因します(2018年12月現在)。従って、ルールを満たすようなパスワードを指定すればOKです。

- 現在設定されているルールを確認するには、詳しくは[「Oracle Cloud Infrastructureのデータベース(DBaaSインスタンス)にサンプルスキーマをインストール」の一番最後「補足2：パスワードの複雑性ルールの確認方法」](https://qiita.com/mikika/items/8ec1af54a6264e0109ee)をご覧ください
- 簡単のため、ルールと書きましたが、厳密には「DEFAULTプロファイルユーザに対して設定されたパスワードの複雑性を検証するファンクションとしてORA12C_STRONG_VERIFY_FUNCTIONが指定されている」ということです

## SQL Developer の SSHポートフォワード設定(ツール内で可能)

Oracle SQL Developer 4.0.3 から実装済みの機能ですが、Cloud環境ではよく使うので改めて。

Cloud環境では、通常はSSHポート(22番)のみ開放することが多いでしょう。この場合、Databaseへのアクセスは、Oracle LISTENERが待つ1521番ポートではなく、22番ポートでSSHポートフォワード(トンネリング)を使ってアクセスします。その際にトンネルをTeraTermやPuTTy等で別途作成することなく、SQL Developer内でその設定が可能です。**トンネルの設定で、接続先はPublic IPを指定しますが、転送先として指定するIPアドレスはPrivate IPを指定する点、要注意ポイント**。

- [製品ドキュメント：Oracle SQL Developerを使用したデータベースへのリモート接続](https://docs.oracle.com/cd/E83857_01/paas/database-dbaas-cloud/csdbi/connect-db-using-sql-developer.html)
- 図ありの手順は[こちらのp.4～p.9](https://speakerdeck.com/miiki/20181130-odm0-connect?slide=4)

# OCI上のComputeインスタンスへのアクセス

次はOSレイヤーについて。Computeインスタンスに関しては以下の通り。

## 特定のポートへのアクセスを許可したい

OCI上のインスタンスに対し、外部から特定のポートへのアクセスを許可したい場合「Computeインスタンス上のFirewall設定の変更」「OCIの管理画面からVCNのSecurity Listsの変更」の**両方**が必要です。手順は以下でもご紹介しています。

- [Oracle Cloud Infrastructure環境にElasticsearchとSudachiプラグインをインストール](https://qiita.com/mikika/items/f61ba65fe4cf70c2d6f0)
    - 最後の方の「リモートからもつながるように設定変更」のところに記載しています
    

## WindowsユーザがMacを使ってみた話（クライアント側）

※Macユーザの方は既知かと思いますので読み飛ばしてください。
※OCIは全く関係なく、クライアント側の話です。個人的な備忘録。

普段はWindowsを使っているのですが、つい最近、Macを使ってアクセスする機会がありました。

### SSH接続

＜前提＞

- puttygenで作成したKEYペアを使って、Oracle Cloud上のインスタンスを作成済み
    - この場合、秘密鍵のファイルは、PuTTY-User-Key-File-2: ssh-rsaで始まる（PuTTY形式）
- Mac OSでは標準でSSHクライアントが付属するので、Mac OS の TerminalからSSH接続する

この場合、この形式の秘密鍵ではアクセスできず、OpenSSH形式への変換が必要です。以下の手順に従って変換。

- [MacでPuTTYの.ppkファイルからOpenSSH形式の秘密鍵を生成しパスフレーズを取り除く](https://qiita.com/B73W56H84/items/88bc05b119da2eaa4757)

### VNC接続（クライアント側）

VNCクライアント、あるといいなあと思っていたら、やはり標準で付属していました。

Finderの「移動」->「サーバへ接続」をクリック。
以下の画面が起動するので、
vnc://IP_Address:port 
を入力。「接続」で、無事に接続完了。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297987/d531a9bd-cccd-30c7-3ad3-5409eafc2014.png)

VNCサーバ側の設定(VNCのインストールと起動)と、SSHポートフォワードを使わない場合のPORTへのアクセス許可設定は、別途行う必要があります。

# 最後に

アクセス関連ではありませんが、「OCIで出来ること」についても、ひとつ追記します。

## Oracle Databaseではじめる機械学習

Oracle Databaseには、Oracle Data Minerという、Oracle Databaseに内包されたIn-Database Analyticsのためのエンジンがあり、SQL Developerを使って、GUI操作でデータの分析・機械学習を行うことができます。
これら一連の操作を Step-By-Stepでハンズオンできる資料を以下に公開していますので、触ってみていただけると嬉しいです。

- [Oracle Data Minerを使って機械学習をはじめよう](https://blogs.oracle.com/bigdata-dataintegration-jp/odm_01_beginning)
- [Oracle Data Minerハンズオン：GLMでの分析](https://blogs.oracle.com/bigdata-dataintegration-jp/odm_02_glm)