セキュリティ関数により、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
DBC
AS
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
の指定に対応しています。