セキュリティ関数により、CData Virtuality Server セキュリティシステムと対話できます。
HASROLE
この関数は、ビューまたはプロシージャの内部クエリが実行されるユーザーが、指定されたData Virtuality Server データロールを持っているかどうかをチェックします:
HASROLE([roleType,] roleName)2つの引数を持つ形式は、後方互換性のために提供されています。
roleTypeは文字列で、data 型でなければなりません;roleNameは文字列でなければなりません。
戻り値の型はboolean です。
ロール名は大文字と小文字を区別し、CData Virtuality Server Data Roles にのみ一致します。JAAS のロール / グループ名は、同じ名前の対応するデータロールが存在しない限り、この機能では無効です。
HASROLE 関数はnondeterministic です。
HASCALLERROLE
この関数は現在の呼び出し元 が指定されたCData Virtuality Server データロールを持っているかどうかをチェックします:
HASCALLERROLE([roleType,] roleName)2つの引数を持つ形式は、後方互換性のために提供されています。
roleTypeは文字列で、data 型でなければなりません;roleNameは文字列で、戻り値の型はboolean です。
ロール名は大文字と小文字を区別し、CData Virtuality Server Data Roles にのみ一致します。JAAS のロール / グループ名は、同じ名前の対応するデータロールが存在しない限り、この機能では無効です。
HASCALLERROLE 関数はuser-deterministic です。
Cryptographic Hash Functions
これらの関数は、与えられた値のハッシュを計算します。
Function | Definition | Data Type Constraint |
|---|---|---|
| Returns the MD5 hash of the value | x in { string, varbinary }, returns varbinary |
| Returns the SHA-1 hash of the value | x in { string, varbinary }, returns varbinary |
| Returns the SHA-2 256-bit hash of the value | x in { string, varbinary }, returns varbinary |
| Returns the SHA-2 512-bit hash of the value | x in {string, varbinary}, returns varbinary |
出力されたバイナリ値を16進表現に変換するには、TO_CHARS(VALUE, 'HEX') 関数を使用できます。
Pushdown
現在、プッシュダウンはサポートされていません。
HASHCODE()
HASHCODE() 関数は、文字列の MD5 で生成された16進値 を計算し、Numeric(65, 0) 表現に変換します:
biginteger HASHCODE(string)この関数の使用例をいくつか示します:
SELECT HASHCODE('test1');; SELECT HASHCODE(col1)FROM myschema.mytable;;基礎となるデータソースがMD5() 関数または同等の書き換えをサポートしている場合、HASHCODE 関数をプッシュダウンしてDBMS 上で直接処理することができます。HASHCODE 関数は、以下のデータソースにプッシュダウンされます:
- PostgreSQL
- MySQL
- Microsoft SQL Server
- Oracle
- Redshift
- Vertica
- Teradata
ここに記載されていないデータベースについては、HASHCODE() 機能は CData Virtuality Server のローカルで処理されます。
HASHCODE() 関数を正しくプッシュダウンするには、 MD5() 関数の正しいプッシュダウンが必須です。
MD5()
MD5() 関数は、文字列のMD5 ハッシュを計算します。以下はその例です:
SELECT MD5('test1');;SELECT MD5(col1)FROM myschema.mytable;;基礎となるデータソースがMD5() 関数または同等の書き換えをサポートしている場合、関数をプッシュダウンしてDBMS 上で直接処理することができます。MD5() 関数は、以下のデータソースにプッシュダウンされます:
- PostgreSQL;
- MySQL;
- Microsoft SQL Server;
- Oracle;
- Redshift;
- Vertica;
- Greenplum;
- Exasol;
- Teradata。
ここにリストされていないデータベースについては、MD5() 関数は Data Virtuality Server でローカルに処理されます。
MD5() 関数の結果は、DBMS によって大文字でも小文字でも返されることに注意してください。 関数がプッシュダウンされずにCData Virtuality Server でローカルに処理される場合、結果は常に大文字で返されます。各種DBMS については、以下の表を参照してください:
DBMS | Uppercase/Lowercase |
|---|---|
PostgreSQL | Lowercase |
MySQL | Lowercase |
Microsoft SQL Server | Lowercase |
Oracle | Uppercase |
Redshift | Lowercase |
Vertica | Lowercase |
Greenplum | Lowercase |
Exasol | Lowercase |
Teradata | Uppercase |
ほとんどの場合、MD5() 関数は上記のプラットフォーム(PostgreSQL、MySQL、Redshift など)の標準インストールでサポートされ、利用可能ですが、その他の場合はいくつかの設定ステップが必要です。
しかし、これらのライブラリが利用できない場合や、関数をプッシュダウンする代わりにMD5() 関数のローカル処理を優先する場合は、トランスレータプロパティsupportsMd5Function の値をFALSE に設定することが可能です(デフォルトでは、TRUE に設定されています)。例:
CALL SYSADMIN.createConnection(name => 'pg', jbossCLITemplateName => 'postgresql', connectionOrResourceAdapterProperties => 'db=<db_name>,user-name=<username>,password=<pass>,host=<hostname>,port=<port_number>');; CALL SYSADMIN.createDataSource(name => 'pg', translator => 'postgresql', modelProperties => 'importer.useFullSchemaName=false,importer.TableTypes="TABLE,VIEW",importer.importIndexes=false,importer.schemaPattern=public', translatorProperties => 'supportsMd5Function=false');;上の例では、MD5() 関数はPostgreSQL にプッシュダウンされるのではなく、ローカルで処理されます。 このトランスレータプロパティはどのトランスレータにも定義できますが、 MD5() 関数のプッシュダウンをサポートしていないトランスレータには影響しません。
以下では、Oracle とTeradata の構成方法について説明します。詳細は、関連ドキュメントを参照してください。
Oracle
Oracle では、 MD5() 関数は、 DBMS_CRYPTO パッケージで利用可能な HASH 関数を使用して書き換えられます。デフォルトでは、管理者以外のユーザは DBMS_CRYPTO パッケージに対する権限を付与されていない場合があります。この場合は、システムユーザー(通常は SYSDBA)として接続し、次のコマンドを実行してください:
GRANT EXECUTE ON DBMS_CRYPTO TO <username>DBMS_CRYPTO パッケージを使用するパーミッションを与えることができない場合は、CData Virtuality Server で関数をローカルで計算するように、トランスレータプロパティsupportsMd5Function の値をfalse に設定できます。
Teradata
Teradata の標準インストールでは、ハッシュ関数は提供されていませんが、外部ライブラリからユーザー定義関数(UDF)としてインストールすることができます。MD5() 関数はhere からダウンロードできます。
通常、DBC ユーザ(Teradata 用に作成されたデフォルトユーザ)には、関数を作成するための十分なパーミッションがありません。外部ライブラリを正しくインストールするには、別のユーザーを作成し、次のように権限を割り当てます:
CREATE USER tera FROM DBCAS PERM = <perm_size>PASSWORD = "tera"DEFAULT DATABASE = TERA; GRANT EXECUTE, SELECT, INSERT, UPDATE, DELETE, STATISTICS, DUMP, RESTORE, CHECKPOINT, SHOW, EXECUTE PROCEDURE, ALTER PROCEDURE, EXECUTE FUNCTION, ALTER FUNCTION, ALTER EXTERNAL PROCEDURE, CREATE OWNER PROCEDURE, CREATE TABLE, CREATE VIEW, CREATE MACRO, CREATE DATABASE, CREATE TRIGGER, CREATE PROCEDURE, CREATE FUNCTION, CREATE EXTERNAL PROCEDURE, CREATE AUTHORIZATION, DROP TABLE, DROP VIEW, DROP MACRO, DROP DATABASE, DROP TRIGGER, DROP PROCEDURE, DROP FUNCTION, DROP AUTHORIZATION ON TERA TO TERA WITH GRANT OPTION; GRANT EXECUTE, SELECT, STATISTICS, SHOW ON DBC TO TERA WITH GRANT OPTION;ENCRYPT
この関数は、与えられた文字列をAES アルゴリズムを用いて符号化します。パスワードを設定ファイルに保存する場合に、パスワードをエンコードするために使用できます。
SELECT ENCRYPT('test');;AES_ENCRYPT
この関数は、公式のAES(Advanced Encryption Standard)アルゴリズム、16バイト(128 ビット)キー長、およびAES/CBC/PKCS5Padding 暗号アルゴリズムを使用したデータの暗号化をサポートします。
Usage:
Basic Encryption:
SELECT AES_ENCRYPT(string data, string key);AES_ENCRYPT() 関数は暗号化された文字列を返します。引数data は暗号化する文字列、引数key は暗号化に使用する文字列です。このバージョンでは、IV、salt、iteration count の定義済みの値を使用します。
Advanced Encryption:
SELECT AES_ENCRYPT(string data, string key, string iv, string salt, int iteration_count);このバージョンでは、セキュリティ強化のため、明示的な初期化ベクトル(iv)、salt、iteration count の指定に対応しています。
AES_DECRYPT
この関数は、公式のAES(Advanced Encryption Standard)アルゴリズム、16バイト(128 ビット)キー長、およびAES/CBC/PKCS5Padding 暗号アルゴリズムを使用したデータの復号化をサポートします。
Usage:
Basic Decryption:
SELECT AES_DECRYPT(string data, string key);AES_DECRYPT() 関数は復号化された文字列を返します。引数data は復号化する暗号化された文字列、引数key は復号化に使用する文字列です。このバージョンでは、定義済みの初期化ベクトル(iv)、salt、iteration count を使用します。
Advanced Decryption:
SELECT AES_DECRYPT(string data, string key, string iv, string salt, int iteration_count);このバージョンでは、セキュリティ強化のため、明示的な初期化ベクトル(iv)、salt、iteration count の指定に対応しています。