セキュリティ関数により、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

MD5_BINARY(x)

Returns the MD5 hash of the value

x in { string, varbinary }, returns varbinary

SHA1(x)

Returns the SHA-1 hash of the value

x in { string, varbinary }, returns varbinary

SHA2_256(x)

Returns the SHA-2 256-bit hash of the value

x in { string, varbinary }, returns varbinary

SHA2_512(x)

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 DBC
AS PERM = <perm_size>
PASSWORD = "tera"
DEFAULT DATABASE = TERA;
 
GRANT EXECUTESELECTINSERTUPDATEDELETESTATISTICS, DUMP, RESTORE, CHECKPOINT, SHOW, EXECUTE PROCEDUREALTER PROCEDUREEXECUTE FUNCTIONALTER FUNCTIONALTER EXTERNAL PROCEDURECREATE OWNER PROCEDURECREATE TABLECREATE VIEWCREATE MACRO, CREATE DATABASECREATE TRIGGERCREATE PROCEDURECREATE FUNCTIONCREATE EXTERNAL PROCEDURECREATE AUTHORIZATIONDROP TABLEDROP VIEWDROP MACRO, DROP DATABASEDROP TRIGGERDROP PROCEDUREDROP FUNCTIONDROP AUTHORIZATION ON TERA TO TERA WITH GRANT OPTION;
 
GRANT EXECUTESELECTSTATISTICS, 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 は暗号化に使用する文字列です。このバージョンでは、IVsaltiteration count の定義済みの値を使用します。

Advanced Encryption:

SELECT AES_ENCRYPT(string data, string key, string iv, string salt, int iteration_count);

このバージョンでは、セキュリティ強化のため、明示的な初期化ベクトル(iv)、saltiteration 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)、saltiteration count を使用します。

Advanced Decryption:

SELECT AES_DECRYPT(string data, string key, string iv, string salt, int iteration_count);

このバージョンでは、セキュリティ強化のため、明示的な初期化ベクトル(iv)、saltiteration count の指定に対応しています。