セキュリティ機能により、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 |
---|---|---|
| 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
現在、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
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アルゴリズムを用いて符号化します。パスワードを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