1

MS SQL 2008R2 での暗号化の実装に取り​​組んでいます。CVS ファイルからデータをロードすると、そのデータが一時テーブルにあり、そのデータの一部を暗号化されたクレジット カード テーブルに移動したいと考えています。ただし、次のエラーが発生し続けます。挿入のコードが続き、テーブルの定義が下にあります。

クライアント ID は 10 未満です。オーバーフローの原因となっている番号は、データの最初の行である CC 番号です。

エラー:

メッセージ 248、レベル 16、状態 1、行 4 varchar 値 '5105105105105100' の変換により、int 列がオーバーフローしました。ステートメントは終了されました。

ステートメントを挿入:

OPEN SYMMETRIC KEY CreditCardKey
        DECRYPTION BY CERTIFICATE CreditCardCert;

    insert into CreditCard
    Select
        HASHBYTES('SHA1', t.CreditCard),
        EncryptByKey(key_guid('CreditCardKey'), t.CreditCard),
        '',
        RIGHT(4, t.CreditCard),
        '1',
        t.Expiration,
        convert(int, t.ClientID)
    From TempTbl t

一時テーブル:

  • ClientID int.
  • First, Last, CC, Expiration-- すべてvarchar(50).

すべてのデータが正しくインポートされたようです。

クレジットカード: (宛先表)

Hash varbinary(200)
Encrypted varbinary(400)
plaintext char(16)
lastfour int
servicecode int
expirationdate Date
ClientID int
4

1 に答える 1

0

構文の問題がオーバーフローの原因でした: RIGHT関数を使用すると、文字と int のオフセットが逆になり、関数の整数式がオーバーフローしました。

正しい使用:

RIGHT ( character_expression , integer_expression )
于 2012-05-07T06:35:27.840 に答える