-->APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse
APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse
Mar 10, 2019 With this library we will create the main methods to build an app example, that is able to generate a new asymmetric key pair and sign a message with a private key. RSA Key Generation Example App. I would like to perform some encryption on client using the asymmetric key stored and generated in SQL Server. I can get the public key from the DMV using the following query: SELECT publickey F.
It doesn't need PuTTY. It is actually fairly simple, if you know what to type. Generate ssh key windows command line download. Here was what worked for me in the end.
Returns a row for each asymmetric key.
Column name | Data type | Description |
---|---|---|
name | sysname | Name of the key. Is unique within the database. |
principal_id | int | ID of the database principal that owns the key. |
asymmetric_key_id | int | ID of the key. Is unique within the database. |
pvt_key_encryption_type | char(2) | How the key is encrypted. NA = Not encrypted MK = Key is encrypted by the master key PW = Key is encrypted by a user-defined password SK = Key is encrypted by service master key. |
pvt_key_encryption_type_desc | nvarchar(60) | Description of how the private key is encrypted. NO_PRIVATE_KEY ENCRYPTED_BY_MASTER_KEY ENCRYPTED_BY_PASSWORD ENCRYPTED_BY_SERVICE_MASTER_KEY |
thumbprint | varbinary(32) | SHA-1 hash of the key. The hash is globally unique. |
algorithm | char(2) | Algorithm used with the key. 1R = 512-bit RSA 2R = 1024-bit RSA 3R = 2048-bit RSA |
algorithm_desc | nvarchar(60) | Description of the algorithm used with the key. RSA_512 RSA_1024 RSA_2048 |
key_length | int | Bit length of the key. |
sid | varbinary(85) | Login SID for this key. For Extensible Key Management keys this value will be NULL. |
string_sid | nvarchar(128) | String representation of the login SID of the key. For Extensible Key Management keys this value will be NULL. |
public_key | varbinary(max) | Public key. |
attested_by | nvarchar(260) | System use only. |
provider_type | nvarchar(120) | Type of cryptographic provider: CRYPTOGRAPHIC PROVIDER = Extensible Key Management keys NULL = Non-Extensible Key Management keys |
cryptographic_provider_guid | uniqueidentifier | GUID for the cryptographic provider. For non-Extensible Key Management keys this value will be NULL. |
cryptographic_provider_algid | sql_variant | Algorithm ID for the cryptographic provider. For non-Extensible Key Management keys this value will be NULL. |
Permissions
The visibility of the metadata in catalog views is limited to securables that a user either owns or on which the user has been granted some permission. For more information, see Metadata Visibility Configuration.
See Also
Security Catalog Views (Transact-SQL)
Extensible Key Management (EKM)
Catalog Views (Transact-SQL)
Encryption Hierarchy
CREATE ASYMMETRIC KEY (Transact-SQL)
-->Extensible Key Management (EKM)
Catalog Views (Transact-SQL)
Encryption Hierarchy
CREATE ASYMMETRIC KEY (Transact-SQL)
Creates an asymmetric key in the database.
This feature is incompatible with database export using Data Tier Application Framework (DACFx). You must drop all asymmetric keys before exporting.
Syntax
Arguments
asym_key_name
Is the name for the asymmetric key in the database. Asymmetric key names must comply with the rules for identifiers and must be unique within the database.
Is the name for the asymmetric key in the database. Asymmetric key names must comply with the rules for identifiers and must be unique within the database.
AUTHORIZATION database_principal_name
Specifies the owner of the asymmetric key. The owner cannot be a role or a group. If this option is omitted, the owner will be the current user.
Specifies the owner of the asymmetric key. The owner cannot be a role or a group. If this option is omitted, the owner will be the current user.
FROM asym_key_source
Specifies the source from which to load the asymmetric key pair.
Specifies the source from which to load the asymmetric key pair.
FILE = 'path_to_strong-name_file'
Specifies the path of a strong-name file from which to load the key pair. Limited to 260 characters by MAX_PATH from the Windows API.
Specifies the path of a strong-name file from which to load the key pair. Limited to 260 characters by MAX_PATH from the Windows API.
Note
Symmetric Key
This option is not available in a contained database.
EXECUTABLE FILE = 'path_to_executable_file'
Specifies the path of an assembly file from which to load the public key. Limited to 260 characters by MAX_PATH from the Windows API.
Specifies the path of an assembly file from which to load the public key. Limited to 260 characters by MAX_PATH from the Windows API.
Note
This option is not available in a contained database.
ASSEMBLY assembly_name
Specifies the name of a signed assembly that has already been loaded into the database from which to load the public key.
Specifies the name of a signed assembly that has already been loaded into the database from which to load the public key.
PROVIDER provider_name
Specifies the name of an Extensible Key Management (EKM) provider. The provider must be defined first using the CREATE PROVIDER statement. For more information about external key management, see Extensible Key Management (EKM).
Specifies the name of an Extensible Key Management (EKM) provider. The provider must be defined first using the CREATE PROVIDER statement. For more information about external key management, see Extensible Key Management (EKM).
ALGORITHM = <algorithm>
Five algorithms can be provided; RSA_4096, RSA_3072, RSA_2048, RSA_1024, and RSA_512.
Five algorithms can be provided; RSA_4096, RSA_3072, RSA_2048, RSA_1024, and RSA_512.
RSA_1024 and RSA_512 are deprecated. To use RSA_1024 or RSA_512 (not recommended) you must set the database to database compatibility level 120 or lower.
PROVIDER_KEY_NAME = 'key_name_in_provider'
Specifies the key name from the external provider.
Specifies the key name from the external provider.
CREATION_DISPOSITION = CREATE_NEW
Creates a new key on the Extensible Key Management device. PROVIDER_KEY_NAME must be used to specify key name on the device. If a key already exists on the device the statement fails with error.
Creates a new key on the Extensible Key Management device. PROVIDER_KEY_NAME must be used to specify key name on the device. If a key already exists on the device the statement fails with error.
CREATION_DISPOSITION = OPEN_EXISTING
Maps a SQL Server asymmetric key to an existing Extensible Key Management key. PROVIDER_KEY_NAME must be used to specify key name on the device. If CREATION_DISPOSITION = OPEN_EXISTING is not provided, the default is CREATE_NEW.
Maps a SQL Server asymmetric key to an existing Extensible Key Management key. PROVIDER_KEY_NAME must be used to specify key name on the device. If CREATION_DISPOSITION = OPEN_EXISTING is not provided, the default is CREATE_NEW.
ENCRYPTION BY PASSWORD = 'password'
Specifies the password with which to encrypt the private key. If this clause is not present, the private key will be encrypted with the database master key. password is a maximum of 128 characters. password must meet the Windows password policy requirements of the computer that is running the instance of SQL Server.
Specifies the password with which to encrypt the private key. If this clause is not present, the private key will be encrypted with the database master key. password is a maximum of 128 characters. password must meet the Windows password policy requirements of the computer that is running the instance of SQL Server.
Remarks
An asymmetric key is a securable entity at the database level. In its default form, this entity contains both a public key and a private key. When executed without the FROM clause, CREATE ASYMMETRIC KEY generates a new key pair. When executed with the FROM clause, CREATE ASYMMETRIC KEY imports a key pair from a file, or imports a public key from an assembly or DLL file.
By default, the private key is protected by the database master key. If no database master key has been created, a password is required to protect the private key.
The private key can be 512, 1024, or 2048 bits long.
Permissions
Requires CREATE ASYMMETRIC KEY permission on the database. If the AUTHORIZATION clause is specified, requires IMPERSONATE permission on the database principal, or ALTER permission on the application role. Only Windows logins, SQL Server logins, and application roles can own asymmetric keys. Groups and roles cannot own asymmetric keys.
Examples
A. Creating an asymmetric key
The following example creates an asymmetric key named
PacificSales09
by using the RSA_2048
algorithm, and protects the private key with a password.B. Creating an asymmetric key from a file, giving authorization to a user
The following example creates the asymmetric key
PacificSales19
from a key pair stored in a file, and assigns ownership of the asymmetric key to user Christina
. The private key is protected by the database master key, which must be created prior to creating the asymmetric key.C. Creating an asymmetric key from an EKM provider
The following example creates the asymmetric key
EKM_askey1
from a key pair stored in an Extensible Key Management provider called EKM_Provider1
, and a key on that provider called key10_user1
.See Also
Asymmetric Key Encryption
ALTER ASYMMETRIC KEY (Transact-SQL)
DROP ASYMMETRIC KEY (Transact-SQL)
ASYMKEYPROPERTY (Transact-SQL)
ASYMKEY_ID (Transact-SQL)
Choose an Encryption Algorithm
Encryption Hierarchy
Extensible Key Management Using Azure Key Vault (SQL Server)
DROP ASYMMETRIC KEY (Transact-SQL)
ASYMKEYPROPERTY (Transact-SQL)
ASYMKEY_ID (Transact-SQL)
Choose an Encryption Algorithm
Encryption Hierarchy
Extensible Key Management Using Azure Key Vault (SQL Server)