セキュリティ機能により、CData Virtuality Server セキュリティ システムと対話できます。

HASROLE

この関数は、、ビューまたはプロシージャの内部クエリが実行されるユーザが、指定された Data Virtuality Server データロールを持っているかどうかをチェックします:

HASROLE([roleType,] roleName)

2つの引数を持つ形式は、後方互換性のために提供されています。

  • roleTypeは文字列で、data型でなければなりません;
  • roleName は文字列でなければなりません。

戻り値の型は boolean です。

ロール名は大文字と小文字を区別し、CData Virtuality Server Data Rolesにのみ一致します。JAASのロール/グループ名は、同じ名前の対応するデータ・ロールが存在しない限り、この機能では無効です。

HASROLE 関数はnondeterministicです。

HASROLE function changed from user-deterministic to nondeterministic since v4.1

HASCALLERROLE

この関数は 現在の呼び出し元が指定された CData Virtuality Server データロールを持っているかどうかをチェックします:

HASCALLERROLE([roleType,] roleName)

2つの引数を持つ形式は、後方互換性のために提供されています。

  • roleTypeは文字列で、data型でなければなりません;
  • roleName は文字列で、戻り値の型は boolean です。

ロール名は大文字と小文字を区別し、CData Virtuality Server Data Rolesにのみ一致します。JAASのロール/グループ名は、同じ名前の対応するデータ・ロールが存在しない限り、この機能では無効です。

HASCALLERROLE関数はuser-deterministicです。

HASCALLERROLE function available since v4.6

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

現在、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() 関数の正しいPushdownのためには、 MD5()関数 の正しいPushdownが必須です。 

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 でローカルに処理される場合、結果は常に大文字で返されます。REFERENCESの違いについては、以下の表を参照してください:

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にPushdownされるのではなく、ローカルで処理されます。 このTranslatorプロパティはどのTranslatorにも定義できますが、 MD5() 関数のPushdownをサポートしていないTranslatorには影響しません。 

以下では、OracleとTeradataの構成方法について説明します。FORの詳細については、関連ドキュメントを参照してください。

Oracle

USING では、 MD5() 関数は、 DBMS_CRYPTOパッケージで利用可能な HASH 関数を使用して書き換えられます。デフォルトでは、管理者でないユーザは DBMS_CRYPTO パッケージに対してノーグラントです。この場合は、システムユーザー(通常は SYSDBA)として接続し、次のコマンドを実行してください:

GRANT EXECUTE ON DBMS_CRYPTO TO <username>

DBMS_CRYPTOパッケージを使用するPermission を与えることができない場合は、CData Virtuality Server で関数をローカルで計算するように、トランスレータプロパティsupportsMd5Functionの値をfalseに設定できます。

Teradata

Teradataの標準インストールでは、ハッシュ関数は提供されていませんが、外部ライブラリからユーザー定義関数(UDF)としてインストールすることができます。MD5() 関数はhereからダウンロードできます。

通常、DBCユーザ(Teradata用に作成されたデフォルトユーザ)には、関数を作成するための十分なPermissionがありません。外部ライブラリを正しくインストールするには、別のユーザーを作成し、次のように権限を割り当てます:

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アルゴリズムを用いて符号化します。パスワードをConfigurationファイルに格納する場合に、パスワードをエンコードするために使用できます。

SELECT encrypt('test');;

AES_ENCRYPT

この関数は、公式の AES (Advanced Encryption Standard) アルゴリズム、16 バイト (128 ビット) の鍵長、および AES/CBC/PKCS5Padding 暗号アルゴリズムを使用し、明示的な初期化ベクトルでデータを暗号化します。

SELECT aes_encrypt(string data, string key);;

 関数 は文字列で暗号化されたデータを返します。AES_ENCRYPT()引数 data は暗号化する文字列データ、引数 key は暗号化に使用する文字列です。

AES_DECRYPT

この関数は、公式のAES(Advanced Encryption Standard)アルゴリズム、16バイト(128ビット)の鍵長、AES/CBC/PKCS5Padding暗号アルゴリズムを使用して、明示的な初期化ベクトルを期待するデータの復号化を可能にします。

SELECT aes_decrypt(string data, string key);;


 AES_DECRYPT()関数は復号化されたデータを文字列で返します。引数  data  は復号化する文字列データ、引数  key  は復号化に使用する文字列です。

The aes_encrypt() and aes_decrypt() functions are available since v4.4