Always Encrypted: API-Referenz für den JDBC-Treiber
Always Encrypted ermöglicht es Clients, vertrauliche Daten in Clientanwendungen zu verschlüsseln und die Verschlüsselungsschlüssel niemals an den Server weiterzugeben. Ein auf dem Clientcomputer installierter Treiber, bei dem Always Encrypted aktiviert ist, erreicht diese Funktionalität durch die automatische Ver- und Entschlüsselung von vertraulichen Daten in der Clientanwendung.
Der Treiber verschlüsselt die Daten in vertraulichen Spalten, bevor er sie an SQL Server übergibt, und generiert Abfragen automatisch erneut, um die Semantik der Anwendung beizubehalten. Auf ähnliche Weise entschlüsselt der Treiber transparent Daten in verschlüsselten Datenbankspalten, die in Abfrageergebnissen enthalten sind. Weitere Informationen finden Sie unter Always Encrypted (Datenbank-Engine) und Verwenden von Always Encrypted mit dem JDBC-Treiber.
Hinweis
Always Encrypted wird nur vom Microsoft JDBC-Treiber 6.0 oder höher für SQL Server mit Azure SQL-Datenbank und SQL Server 2016 und höher unterstützt.
Always Encrypted: API-Referenzen
Für Clientanwendungen, die „Immer verschlüsselt“ verwenden, sind mehrere neue Erweiterungen und Änderungen der JDBC-Treiber-API verfügbar.
SQLServerConnection-Klasse
Name | BESCHREIBUNG |
---|---|
Neues Verbindungszeichenfolgen-Schlüsselwort: columnEncryptionSetting |
columnEncryptionSetting=Enabled aktiviert die Always Encrypted-Funktionalität für die Verbindung, und columnEncryptionSetting=Disabled deaktiviert sie. Zulässige Werte sind „Enabled“/„Disabled“. Der Standardwert ist „Disabled“. |
Neues Schlüsselwort für Verbindungszeichenfolgen (ab MS JDBC 7.4) keyVaultProviderClientId keyVaultProviderClientKey |
keyVaultProviderClientId=<Client-ID>;keyVaultProviderClientKey=<Clientschlüssel> Registriert den SQLServerColumnEncryptionAzureKeyVaultProvider und verwendet die Werte von ClientID und ClientKey zum Abrufen des Spaltenhauptschlüssel aus Azure Key Vault. |
Neue Methoden:public static void setColumnEncryptionTrustedMasterKeyPaths(Map<String, List\<String>> trustedKeyPaths) public static void updateColumnEncryptionTrustedMasterKeyPaths(String server, List\<String> trustedKeyPaths) public static void removeColumnEncryptionTrustedMasterKeyPaths(String server) |
Ermöglicht Ihnen, eine Liste von vertrauenswürdigen Schlüsselpfaden für einen Datenbankserver festzulegen bzw. zu aktualisieren oder zu entfernen. Wenn der Treiber während der Verarbeitung eine Anwendungsabfrage einen Schlüsselpfad erhält, der nicht in der Liste enthalten ist, schlägt die Abfrage fehl. Diese Eigenschaft bietet zusätzlichen Schutz vor Angriffen, bei denen ein kompromittierter Server gefälschte Schlüsselpfade bereitstellt, was zur Preisgabe der Anmeldeinformationen des Schlüsselspeichers führen kann. |
Neue Methode:public static Map<String, List\<String>> getColumnEncryptionTrustedMasterKeyPaths() |
Gibt eine Liste von vertrauenswürdigen Schlüsselpfaden für einen Datenbankserver zurück. |
Neue Methode:public static void registerColumnEncryptionKeyStoreProviders (Map\<String, SQLServerColumnEncryptionKeyStoreProvider> clientKeyStoreProviders) |
Ermöglicht Ihnen, benutzerdefinierte Schlüsselspeicheranbieter zu registrieren. Dies ist ein Wörterbuch, das Anbieternamen von Schlüsselspeichern Implementierungen von Schlüsselspeicheranbietern zuordnet. Um JVM Key Store zu verwenden, müssen Sie ein JSQLServerColumnEncryptionJVMKeyStoreProvider-Objekt mit Anmeldeinformationen von JVM Key Store instanziieren und beim Treiber registrieren. Der Name für diesen Anbieter muss „MSSQL_JVM_KEYSTORE“ sein. Um den Azure Key Vault-Speicher zu verwenden, müssen Sie ein SQLServerColumnEncryptionAzureKeyStoreProvider-Objekt instanziieren und beim Treiber registrieren. Der Name für diesen Anbieter muss „AZURE_KEY_VAULT“ lauten. |
Neue Methode:public static void unregisterColumnEncryptionKeyStoreProviders (Map\<String, SQLServerColumnEncryptionKeyStoreProvider> clientKeyStoreProviders) |
Ermöglicht das Aufheben der Registrierung aller benutzerdefinierten Schlüsselspeicheranbieter durch Löschen des Wörterbuchs, das die Namen der Schlüsselspeicheranbieter den entsprechenden Implementierungen zuordnet. |
public final boolean getSendTimeAsDatetime() |
Gibt die Einstellung der sendTimeAsDatetime-Verbindungseigenschaft zurück. |
public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue) |
Ändert die Einstellung der sendTimeAsDatetime-Verbindungseigenschaft. |
SQLServerConnectionPoolProxy-Klasse
Name | BESCHREIBUNG |
---|---|
public final boolean getSendTimeAsDatetime() |
Gibt die Einstellung der sendTimeAsDatetime-Verbindungseigenschaft zurück. |
public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue) |
Ändert die Einstellung der sendTimeAsDatetime-Verbindungseigenschaft. |
SQLServerDataSource-Klasse
Name | BESCHREIBUNG |
---|---|
public void setColumnEncryptionSetting(String columnEncryptionSetting) |
Aktiviert/deaktiviert die „Immer verschlüsselt“-Funktionalität für das Datenquellenobjekt. Der Standardwert ist „Disabled“. |
public String getColumnEncryptionSetting() |
Ruft die „Immer verschlüsselt“-Funktionalitätseinstellung für das Datenquellenobjekt ab. |
public void setKeyStoreAuthentication(String keyStoreAuthentication) |
Legt den Namen fest, der einen Schlüsselspeicher bezeichnet. Der einzige unterstützte Wert ist das JavaKeyStorePassword zum Identifizieren des Java-Keystores. Der Standardwert ist NULL. |
public String getKeyStoreAuthentication() |
Ruft den Wert der keyStoreAuthentication-Einstellung für das Datenquellenobjekt ab. |
public void setKeyStoreSecret(String keyStoreSecret) |
Legt das Kennwort für den Java-Keystore fest. Das Kennwort für den Keystore und für den Schlüssel müssen übereinstimmen. keyStoreAuthentication muss auf JavaKeyStorePassword festgelegt werden. |
public void setKeyStoreLocation(String keyStoreLocation) |
Legt den Speicherort einschließlich des Dateinamens für den Java-Keystore fest. keyStoreAuthentication muss auf JavaKeyStorePassword festgelegt werden. |
public String getKeyStoreLocation() |
Ruft den keyStoreLocation für den Java-Keystore ab. |
SQLServerColumnEncryptionJavaKeyStoreProvider-Klasse
Die Implementierung der Schlüsselspeicheranbieters für Java Key Store. Diese Klasse ermöglicht die Verwendung von Zertifikaten, die als CMKs im Java Keystore gespeichert wurden.
Konstruktoren:
Name | BESCHREIBUNG |
---|---|
public SQLServerColumnEncryptionJavaKeyStoreProvider (String keyStoreLocation, char[] keyStoreSecret) |
Keystoreanbieter für den Java-Keystore. |
Methoden:
Name | BESCHREIBUNG |
---|---|
public byte[] decryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) |
Entschlüsselt den angegebenen verschlüsselten Wert eines Spaltenverschlüsselungsschlüssels. Es wird erwartet, dass der verschlüsselte Wert mit dem Zertifikat mit dem angegebenen Schlüsselpfad und mit dem angegebenen Algorithmus verschlüsselt wird. Der Schlüsselpfad sollte in einem der folgenden Formate vorliegen: Thumbprint:<Zertifikatfingerabdruck> Alias:<Zertifikatalias> (Setzt SQLServerColumnEncryptionKeyStoreProvider außer Kraft. decryptColumnEncryptionKey(String, String, Byte[]).) |
public byte[] encryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte[] plainTextColumnEncryptionKey) |
Verschlüsselt einen Spaltenverschlüsselungsschlüssel mithilfe des Zertifikats mit dem angegebenen Schlüsselpfad und angegebenen Algorithmus. Der Schlüsselpfad sollte in einem der folgenden Formate vorliegen: Thumbprint:<Zertifikatfingerabdruck> Alias:<Zertifikatalias> (Setzt SQLServerColumnEncryptionKeyStoreProvider außer Kraft. encryptColumnEncryptionKey(String, String, Byte[]).) |
public boolean verifyColumnEncryptionKey (String masterKeyPath, boolean allowEnclaveComputations, byte[] signature) |
Überprüft die Signatur des Spaltenverschlüsselungsschlüssels mithilfe des Zertifikats. Der Schlüsselpfad sollte in einem der folgenden Formate vorliegen: Thumbprint:<Zertifikatfingerabdruck> Alias:<Zertifikatalias> (Setzt SQLServerColumnEncryptionKeyStoreProvider außer Kraft. verifyColumnEncryptionKey(String, boolean, Byte[]).) |
public void setName (String name) |
Legt den Namen dieses Keystoreanbieters fest. |
public String getName () |
Ruft den Namen dieses Keystoreanbieters ab. |
SQLServerColumnEncryptionAzureKeyVaultProvider-Klasse
Die Implementierung der Schlüsselspeicheranbieters für Azure Key Vault. Diese Klasse ermöglicht die Verwendung von Schlüsseln, die als Spaltenhauptschlüssel in Azure Key Vault gespeichert sind.
Konstruktoren:
Name | Beschreibung |
---|---|
public SQLServerColumnEncryptionAzureKeyVaultProvider () |
Erstellt ein SQLServerColumnEncryptionAzureKeyVaultProvider-Objekt für die Authentifizierung bei Azure Key Vault |
public SQLServerColumnEncryptionAzureKeyVaultProvider (String clientId) |
Erstellt ein SQLServerColumnEncryptionAzureKeyVaultProvider-Objekt für die Authentifizierung bei Azure Key Vault mithilfe des Bezeichners des Clients, der das Token anfordert |
public SQLServerColumnEncryptionAzureKeyVaultProvider (String clientId, String clientKey) |
Erstellt ein SQLServerColumnEncryptionAzureKeyVaultProvider-Objekt für die Authentifizierung bei Azure Key Vault mithilfe des Bezeichners und des Schlüssels des Clients, der das Token anfordert |
public SQLServerColumnEncryptionAzureKeyVaultProvider (TokenCredential tokenCredential) |
Erstellt ein SQLServerColumnEncryptionAzureKeyVaultProvider-Objekt für die Authentifizierung bei Azure Key Vault mithilfe des angegebenen TokenCredential-Objekts |
Methoden:
Name | Beschreibung |
---|---|
public byte[] decryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) |
Entschlüsselt einen verschlüsselten Spaltenverschlüsselungsschlüssel (Column Encryption Key, CEK). Diese Entschlüsselung wird mithilfe eines RSA-Verschlüsselungsalgorithmus durchgeführt, der den durch den Hauptschlüsselpfad angegebenen asymmetrischen Schlüssel verwendet. (Setzt SQLServerColumnEncryptionKeyStoreProvider außer Kraft. decryptColumnEncryptionKey(String, String, Byte[]).) |
public byte[] encryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte[] columnEncryptionKey) |
Verschlüsselt einen Spaltenverschlüsselungsschlüssel, indem der angegebene Spaltenhauptschlüssel an den angegebenen Algorithmus übergeben wird. (Setzt SQLServerColumnEncryptionKeyStoreProvider außer Kraft. encryptColumnEncryptionKey(String, String, Byte[]).) |
public void setName (String name) |
Legt den Namen dieses Keystoreanbieters fest. |
public String getName () |
Ruft den Namen dieses Keystoreanbieters ab. |
SQLServerKeyVaultAuthenticationCallback-Schnittstelle
Diese Schnittstelle enthält eine Methode für die Authentifizierung bei Azure Key Vault, die vom Benutzer implementiert werden muss.
Methoden:
Name | BESCHREIBUNG |
---|---|
public String getAccessToken(String authority, String resource, String scope); |
Diese Methode muss außer Kraft gesetzt werden. Die Methode wird zum Abrufen eines Zugriffstokens für Azure Key Vault verwendet. |
SQLServerColumnEncryptionKeyStoreProvider-Klasse
Erweitern Sie diese Klasse, um einen benutzerdefinierten Schlüsselspeicheranbieter zu implementieren.
Name | BESCHREIBUNG |
---|---|
SQLServerColumnEncryptionKeyStoreProvider | Die Basisklasse für alle Schlüsselspeicheranbieter. Ein benutzerdefinierter Anbieter muss von dieser Klasse abgeleitet werden, seine Memberfunktionen überschreiben und dann mithilfe von SQLServerConnection registriert werden. registerColumnEncryptionKeyStoreProviders(). |
Methoden:
Name | BESCHREIBUNG |
---|---|
public abstract byte[] decryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte [] encryptedColumnEncryptionKey) |
Basisklassenmethode, um den angegebenen verschlüsselten Wert eines CEK zu entschlüsseln. Es wird erwartet, dass der verschlüsselte Wert verschlüsselt wird, indem der Spaltenhauptschlüssel mit dem angegebenen Schlüsselpfad sowie der angegebene Algorithmus verwendet wird. |
public abstract byte[] encryptColumnEncryptionKey (String masterKeyPath, String encryptionAlgorithm, byte[] columnEncryptionKey) |
Basisklassenmethode, um einen CEK mithilfe eines CMK mit dem angegebenen Schlüsselpfad und mithilfe des angegebenen Algorithmus zu verschlüsseln. |
public abstract void setName(String name) |
Legt den Namen dieses Keystoreanbieters fest. |
public abstract String getName() |
Ruft den Namen dieses Keystoreanbieters ab. |
Neue oder überladene Methoden in der SQLServerPreparedStatement-Klasse
Name | BESCHREIBUNG |
---|---|
public void setBigDecimal(int parameterIndex, BigDecimal x, int precision, int scale) public void setObject(int parameterIndex, Object x, int targetSqlType, Integer precision, int scale) public void setObject(int parameterIndex, Object x, SQLType targetSqlType, Integer precision, Integer scale) public void setTime(int parameterIndex, java.sql.Time x, int scale) public void setTimestamp(int parameterIndex, java.sql.Timestamp x, int scale) public void setDateTimeOffset(int parameterIndex, microsoft.sql.DateTimeOffset x, int scale) |
Diese Methoden werden mit einem Argument für Genauigkeit oder Anzahl von Dezimalstellen oder beidem überladen, um Always Encrypted für bestimmte Datentypen zu unterstützen, die Informationen zu Genauigkeit und Skalierung erfordern. |
public void setMoney(int parameterIndex, BigDecimal x) public void setSmallMoney(int parameterIndex, BigDecimal x) public void setUniqueIdentifier(int parameterIndex, String guid) public void setDateTime(int parameterIndex, java.sql.Timestamp x) public void setSmallDateTime(int parameterIndex, java.sql.Timestamp x) |
Diese Methoden fügen Always Encrypted-Unterstützung zu den Datentypen „money“, „smallmoney“, „uniqueidentifier“, „datetime“ und „smalldatetime“ hinzu. Über die vorhandene Methode setTimestamp() werden Parameterwerte an die verschlüsselte datetime2-Spalte gesendet. Für verschlüsselte datetime- und smalldatetime-Spalten verwenden Sie jeweils die neuen Methoden setDateTime() und setSmallDateTime() . |
public final void setBigDecimal(int parameterIndex, BigDecimal x, int precision, int scale, boolean forceEncrypt) public final void setMoney(int parameterIndex, BigDecimal x, boolean forceEncrypt) public final void setSmallMoney(int parameterIndex, BigDecimal x, boolean forceEncrypt) public final void setBoolean(int parameterIndex, boolean x, boolean forceEncrypt) public final void setByte(int parameterIndex, byte x, boolean forceEncrypt) public final void setBytes(int parameterIndex, byte x[], boolean forceEncrypt) public final void setUniqueIdentifier(int parameterIndex, String guid, boolean forceEncrypt) public final void setDouble(int parameterIndex, double x, boolean forceEncrypt) public final void setFloat(int parameterIndex, float x, boolean forceEncrypt) public final void setInt(int parameterIndex, int value, boolean forceEncrypt) public final void setLong(int parameterIndex, long x, boolean forceEncrypt) public final setObject(int parameterIndex, Object x, int targetSqlType, Integer precision, int scale, boolean forceEncrypt) public final void setObject(int parameterIndex, Object x, SQLType targetSqlType, Integer precision, Integer scale, boolean forceEncrypt) public final void setShort(int parameterIndex, short x, boolean forceEncrypt) public final void setString(int parameterIndex, String str, boolean forceEncrypt) public final void setNString(int parameterIndex, String value, boolean forceEncrypt) public final void setTime(int parameterIndex, java.sql.Time x, int scale, boolean forceEncrypt) public final void setTimestamp(int parameterIndex, java.sql.Timestamp x, int scale, boolean forceEncrypt) public final void setDateTimeOffset(int parameterIndex, microsoft.sql.DateTimeOffset x, int scale, boolean forceEncrypt) public final void setDateTime(int parameterIndex, java.sql.Timestamp x, boolean forceEncrypt) public final void setSmallDateTime(int parameterIndex, java.sql.Timestamp x, boolean forceEncrypt) public final void setDate(int parameterIndex, java.sql.Date x, java.util.Calendar cal, boolean forceEncrypt) public final void setTime(int parameterIndex, java.sql.Time x, java.util.Calendar cal, boolean forceEncrypt) public final void setTimestamp(int parameterIndex, java.sql.Timestamp x, java.util.Calendar cal, boolean forceEncrypt) |
Legt den benannten Parameter auf den angegebenen Java-Wert fest. Wenn der boolesche Wert forceEncrypt auf „true“ festgelegt ist, wird der Abfrageparameter nur festgelegt, wenn die angegebene Spalte verschlüsselt und Always Encrypted in der Verbindung oder Anweisung aktiviert ist.Wenn der boolesche forceEncryption-Typ auf „false“ festgelegt ist, erzwingt der Treiber die Verschlüsselung in Parametern nicht. |
Neue oder überladene Methoden in der SQLServerCallableStatement-Klasse
Name | BESCHREIBUNG |
---|---|
public void registerOutParameter(int parameterIndex, int sqlType, int precision, int scale) public void registerOutParameter(int parameterIndex, SQLType sqlType, int precision, int scale) public void registerOutParameter(String parameterName, int sqlType, int precision, int scale) public void registerOutParameter(String parameterName, SQLType sqlType, int precision, int scale) public void setBigDecimal(String parameterName, BigDecimal bd, int precision, int scale) public void setTime(String parameterName, java.sql.Time t, int scale) public void setTimestamp(String parameterName, java.sql.Timestamp t, int scale) public void setDateTimeOffset(String parameterName, microsoft.sql.DateTimeOffset t, int scale) public final void setObject(String sCol, Object x, int targetSqlType, Integer precision, int scale) |
Diese Methoden werden mit einem Argument für Genauigkeit oder Anzahl von Dezimalstellen oder beidem überladen, um Always Encrypted für bestimmte Datentypen zu unterstützen, die Informationen zu Genauigkeit und Skalierung erfordern. |
public void setDateTime(String parameterName, java.sql.Timestamp x) public void setSmallDateTime(String parameterName, java.sql.Timestamp x) public void setUniqueIdentifier(String parameterName, String guid) public void setMoney(String parameterName, BigDecimal bd) public void setSmallMoney(String parameterName, BigDecimal bd) public Timestamp getDateTime(int index) public Timestamp getDateTime(String sCol) public Timestamp getDateTime(int index, Calendar cal) public Timestamp getSmallDateTime(int index) public Timestamp getSmallDateTime(String sCol) public Timestamp getSmallDateTime(int index, Calendar cal) public Timestamp getSmallDateTime(String name, Calendar cal) public BigDecimal getMoney(int index) public BigDecimal getMoney(String sCol) public BigDecimal getSmallMoney(int index) public BigDecimal getSmallMoney(String sCol) |
Diese Methoden fügen Always Encrypted-Unterstützung zu den Datentypen „money“, „smallmoney“, „uniqueidentifier“, „datetime“ und „smalldatetime“ hinzu. Über die vorhandene Methode setTimestamp() werden Parameterwerte an die verschlüsselte datetime2-Spalte gesendet. Für verschlüsselte datetime- und smalldatetime-Spalten verwenden Sie jeweils die neuen Methoden setDateTime() und setSmallDateTime() . |
public void setObject(String parameterName, Object o, int n, int m, boolean forceEncrypt) public void setObject(String parameterName, Object obj, SQLType jdbcType, int scale, boolean forceEncrypt) public void setDate(String parameterName, java.sql.Date x, Calendar c, boolean forceEncrypt) public void setTime(String parameterName, java.sql.Time t, int scale, boolean forceEncrypt) public void setTime(String parameterName, java.sql.Time x, Calendar c, boolean forceEncrypt) public void setDateTime(String parameterName, java.sql.Timestamp x, boolean forceEncrypt) public void setDateTimeOffset(String parameterName, microsoft.sql.DateTimeOffset t, int scale, boolean forceEncrypt) public void setSmallDateTime(String parameterName, java.sql.Timestamp x, boolean forceEncrypt) public void setTimestamp(String parameterName, java.sql.Timestamp t, int scale, boolean forceEncrypt) public void setTimestamp(String parameterName, java.sql.Timestamp x, boolean forceEncrypt) public void setUniqueIdentifier(String parameterName, String guid, boolean forceEncrypt) public void setBytes(String parameterName, byte[] b, boolean forceEncrypt) public void setByte(String parameterName, byte b, boolean forceEncrypt) public void setString(String parameterName, String s, boolean forceEncrypt) public final void setNString(String parameterName, String value, boolean forceEncrypt)<br /><br /> public void setMoney(String parameterName, BigDecimal bd, boolean forceEncrypt) public void setSmallMoney(String parameterName, BigDecimal bd, boolean forceEncrypt) public void setBigDecimal(String parameterName, BigDecimal bd, int precision, int scale, boolean forceEncrypt) public void setDouble(String parameterName, double d, boolean forceEncrypt) public void setFloat(String parameterName, float f, boolean forceEncrypt) public void setInt(String parameterName, int i, boolean forceEncrypt) public void setLong(String parameterName, long l, boolean forceEncrypt) public void setShort(String parameterName, short s, boolean forceEncrypt) public void setBoolean(String parameterNames, boolean b, boolean forceEncrypt) public void setTimeStamp(String sCol, java.sql.Timestamp x, Calendar c, Boolean forceEncrypt) |
Legt den benannten Parameter auf den angegebenen Java-Wert fest. Wenn der boolesche Wert „forceEncrypt“ auf „true“ festgelegt ist, wird der Abfrageparameter nur festgelegt, wenn die angegebene Spalte verschlüsselt und Always Encrypted für die Verbindung oder Anweisung aktiviert ist. Wenn der boolesche forceEncryption-Typ auf „false“ festgelegt ist, erzwingt der Treiber die Verschlüsselung in Parametern nicht. |
Neue oder überladene Methoden in der SQLServerResultSet-Klasse
Name | Beschreibung |
---|---|
public String getUniqueIdentifier(int columnIndex) public String getUniqueIdentifier(String columnLabel) public java.sql.Timestamp getDateTime(int columnIndex) public java.sql.Timestamp getDateTime(String columnName) public java.sql.Timestamp getDateTime(int columnIndex, Calendar cal) public java.sql.Timestamp getDateTime(String colName, Calendar cal) public java.sql.Timestamp getSmallDateTime(int columnIndex) public java.sql.Timestamp getSmallDateTime(String columnName) public java.sql.Timestamp getSmallDateTime(int columnIndex, Calendar cal) public java.sql.Timestamp getSmallDateTime(String colName, Calendar cal) public BigDecimal getMoney(int columnIndex) public BigDecimal getMoney(String columnName) public BigDecimal getSmallMoney(int columnIndex) public BigDecimal getSmallMoney(String columnName) public void updateMoney(String columnName, BigDecimal x) public void updateSmallMoney(String columnName, BigDecimal x) public void updateDateTime(int index, java.sql.Timestamp x) public void updateSmallDateTime(int index, java.sql.Timestamp x) |
Diese Methoden fügen Always Encrypted-Unterstützung zu den Datentypen „money“, „smallmoney“, „uniqueidentifier“, „datetime“ und „smalldatetime“ hinzu. Die vorhandene Methode updateTimestamp() wird zum Aktualisieren von verschlüsselten datetime2-Spalten verwendet. Für verschlüsselte datetime- und smalldatetime-Spalten verwenden Sie jeweils die neuen Methoden updateDateTime() und updateSmallDateTime() . |
public void updateBoolean(int index, boolean x, boolean forceEncrypt) public void updateByte(int index, byte x, boolean forceEncrypt) public void updateShort(int index, short x, boolean forceEncrypt) public void updateInt(int index, int x, boolean forceEncrypt) public void updateLong(int index, long x, boolean forceEncrypt) public void updateFloat(int index, float x, boolean forceEncrypt) public void updateDouble(int index, double x, boolean forceEncrypt) public void updateMoney(int index, BigDecimal x, boolean forceEncrypt) public void updateMoney(String columnName, BigDecimal x, boolean forceEncrypt) public void updateSmallMoney(int index, BigDecimal x, boolean forceEncrypt) public void updateSmallMoney(String columnName, BigDecimal x, boolean forceEncrypt) public void updateBigDecimal(int index, BigDecimal x, Integer precision, Integer scale, boolean forceEncrypt) public void updateString(int columnIndex, String stringValue, boolean forceEncrypt) public void updateNString(int columnIndex, String nString, boolean forceEncrypt) public void updateNString(String columnLabel, String nString, boolean forceEncrypt) public void updateBytes(int index, byte x[], boolean forceEncrypt) <br/><br/> public void updateDate(int index, java.sql.Date x, boolean forceEncrypt) public void updateTime(int index, java.sql.Time x, Integer scale, boolean forceEncrypt) public void updateTimestamp(int index, java.sql.Timestamp x, int scale, boolean forceEncrypt) public void updateDateTime(int index, java.sql.Timestamp x, Integer scale, boolean forceEncrypt) public void updateSmallDateTime(int index, java.sql.Timestamp x, Integer scale, boolean forceEncrypt) public void updateDateTimeOffset(int index, microsoft.sql.DateTimeOffset x, Integer scale, boolean forceEncrypt) public void updateUniqueIdentifier(int index, String x, boolean forceEncrypt) public void updateObject(int index, Object x, int precision, int scale, boolean forceEncrypt) public void updateObject(int index, Object obj, SQLType targetSqlType, int scale, boolean forceEncrypt) public void updateBoolean(String columnName, boolean x, boolean forceEncrypt) public void updateByte(String columnName, byte x, boolean forceEncrypt) public void updateShort(String columnName, short x, boolean forceEncrypt) public void updateInt(String columnName, int x, boolean forceEncrypt) public void updateLong(String columnName, long x, boolean forceEncrypt) public void updateFloat(String columnName, float x, boolean forceEncrypt) public void updateDouble(String columnName, double x, boolean forceEncrypt) <br/><br/> public void updateBigDecimal(String columnName, BigDecimal x, boolean forceEncrypt) public void updateBigDecimal(String columnName, BigDecimal x, Integer precision, Integer scale, boolean forceEncrypt) public void updateString(String columnName, String x, boolean forceEncrypt) public void updateBytes(String columnName, byte x[], boolean forceEncrypt) public void updateDate(String columnName, java.sql.Date x, boolean forceEncrypt) public void updateTime(String columnName, java.sql.Time x, int scale, boolean forceEncrypt) public void updateTimestamp(String columnName, java.sql.Timestamp x, int scale, boolean forceEncrypt) public void updateDateTime(String columnName, java.sql.Timestamp x, int scale, boolean forceEncrypt) public void updateSmallDateTime(String columnName, java.sql.Timestamp x, int scale, boolean forceEncrypt) public void updateDateTimeOffset(String columnName, microsoft.sql.DateTimeOffset x, int scale, boolean forceEncrypt) public void updateUniqueIdentifier(String columnName, String x, boolean forceEncrypt) public void updateObject(String columnName, Object x, int precision, int scale, boolean forceEncrypt) public void updateObject(String columnName, Object obj, SQLType targetSqlType, int scale, boolean forceEncrypt) |
Aktualisiert die benannte Spalte auf den angegebenen Java-Wert. Wenn der boolesche Wert forceEncrypt auf „true“ festgelegt ist, wird die Spalte nur festgelegt, wenn sie verschlüsselt und Always Encrypted in der Verbindung oder Anweisung aktiviert ist.Wenn der boolesche Wert forceEncrypt auf „false“ festgelegt ist, erzwingt der Treiber die Verschlüsselung in Parametern nicht. |
Neue Typen in der microsoft.sql.Types-Klasse
Name | BESCHREIBUNG |
---|---|
DATETIME, SMALLDATETIME, MONEY, SMALLMONEY, GUID | Verwenden Sie diese Typen als SQL-Zieltypen, wenn Sie Parameterwerte mithilfe von setObject()/updateObject() -API-Methoden an verschlüsselte datetime-, smalldatetime-, money-, smallmoney- oder uniqueidentifier-Spalten senden. |
SQLServerStatementColumnEncryptionSetting-Enumeration
Gibt an, wie Daten beim Lesen und Schreiben von verschlüsselten Spalten gesendet und empfangen werden. Je nach spezifischer Abfrage können Leistungseinbußen möglicherweise durch Umgehen der Verarbeitung des Always Encrypted-Treibers verringert werden, wenn nicht verschlüsselte Spalten verwendet werden. Diese Einstellungen können nicht dazu verwendet werden, die Verschlüsselung zu umgehen und Zugriff auf Klartextdaten zu erhalten.
Syntax:
Public enum SQLServerStatementColumnEncryptionSetting
Mitglieder:
Name | BESCHREIBUNG |
---|---|
UseConnectionSetting | Gibt an, dass der Befehl standardmäßig die Einstellung für die grundsätzliche Verschlüsselung in der Verbindungszeichenfolge verwenden sollte. |
Aktiviert | Aktiviert die grundsätzliche Verschlüsselung für die Abfrage. |
ResultSetOnly | Gibt an, dass nur die Ergebnisse des Befehls von der Routine für die grundsätzliche Verschlüsselung im Treiber verarbeitet werden sollen. Verwenden Sie diesen Wert, wenn der Befehl keine Parameter aufweist, die eine Verschlüsselung erfordern. |
Disabled | Deaktiviert die grundsätzliche Verschlüsselung für die Abfrage. |
Die Einstellung für Always Encrypted auf Anweisungsebene wird zur SQLServerConnection- und zur SQLServerConnectionPoolProxy-Klasse hinzugefügt. Die folgenden Methoden in diesen Klassen werden mit der neuen Einstellung überladen.
Name | BESCHREIBUNG |
---|---|
public Statement createStatement(int nType, int nConcur, int statementHoldability, SQLServerStatementColumnEncryptionSetting stmtColEncSetting) |
Erstellt ein Statement-Objekt, das ResultSet-Objekte mit den angegebenen Werten für Typ, Parallelität, Haltbarkeit und Einstellung für die Spaltenverschlüsselung generiert. |
public CallableStatement prepareCall(String sql, int nType, int nConcur, int statementHoldability, SQLServerStatementColumnEncryptionSetting stmtColEncSetiing) |
Erstellt ein CallableStatement-Objekt mit der angegebenen Einstellung für die Spaltenverschlüsselung, das ResultSet-Objekte mit den angegebenen Werten für Typ, Parallelität und Haltbarkeit generiert. |
public PreparedStatement prepareStatement(String sql, int autogeneratedKeys, SQLServerStatementColumnEncryptionSetting stmtColEncSetting) |
Erstellt ein PreparedStatement-Objekt mit der angegebenen Einstellung für die Spaltenverschlüsselung, das automatisch generierte Schlüssel abrufen kann. |
public PreparedStatement prepareStatement(String sql, String[] columnNames, SQLServerStatementColumnEncryptionSetting stmtColEncSetting) |
Erstellt ein PreparedStatement-Objekt mit der angegebenen Einstellung für die Spaltenverschlüsselung, das ResultSet-Objekte mit den angegebenen Spaltennamen generiert. |
public PreparedStatement prepareStatement(String sql, int[] columnIndexes, SQLServerStatementColumnEncryptionSetting stmtColEncSetting |
Erstellt ein PreparedStatement-Objekt mit der angegebenen Einstellung für die Spaltenverschlüsselung, das ResultSet-Objekte mit den angegebenen Spaltenindizes generiert. |
public PreparedStatement prepareStatement(String sql, int nType, int nConcur, int nHold, SQLServerStatementColumnEncryptionSetting stmtColEncSetting) |
Erstellt ein PreparedStatement-Objekt mit der angegebenen Einstellung für die Spaltenverschlüsselung, das ResultSet-Objekte mit den angegebenen Werten für Typ, Parallelität und Haltbarkeit generiert. |
Hinweis
Wenn Always Encrypted für eine Abfrage deaktiviert ist und die Abfrage Parameter enthält, die verschlüsselt werden müssen (also Parameter, die verschlüsselten Spalten entsprechen), tritt bei der Abfrage ein Fehler auf.
Wenn Always Encrypted für eine Abfrage deaktiviert ist und die Abfrage Ergebnisse aus verschlüsselten Spalten zurückgibt, gibt die Abfrage verschlüsselte Werte zurück. Die verschlüsselten Werte weisen den Datentyp „varbinary“ auf.