SQL Server
SQL Server
Windows Credentials Manager - AutoSplit Larger Secrets
See more Secrets Examples
Secrets stored in the Windows Credentials Manager can be a maximum of 2560 bytes in size. If the content of the secret is too large for the Windows Credential Manager, Chilkat will automatically split the secret into parts and store a shorter JSON manifest.Note: This example requires Chilkat v10.1.0 or later.
Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @secrets int
EXEC @hr = sp_OACreate 'Chilkat.Secrets', @secrets OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- The default value of AutoSplit is 1.
-- Note: AutoSplit only applies when the secret location is "local_manager"
-- and the app is running on the Windows OS. All other secret locations, such as Apple Keychain,
-- AWS Secrets Manager, Azure Key Vault, etc. don't have limitations that are so small.
EXEC sp_OASetProperty @secrets, 'AutoSplit', 1
-- On Windows, this is the Windows Credentials Manager
-- On MacOS/iOS, it is the Apple Keychain
-- (This example is explaining how a secret too large for the Windows Credential Manager
-- is automatically compressed and split into parts if needed.)
EXEC sp_OASetProperty @secrets, 'Location', 'local_manager'
-- Specify the name of the secret.
-- service and username are required.
-- appName and domain are optional.
-- Note: The values are arbitrary and can be anything you want.
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'appName', 'AA_MyApp'
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'service', 'OAuth2'
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'domain', 'onedrive'
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'username', 'matt'
-- Get the secret to be stored.
DECLARE @jsonSecret int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonSecret OUT
EXEC sp_OAMethod @jsonSecret, 'LoadFile', @success OUT, 'qa_data/tokens/oneDrive.json'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @jsonSecret, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @secrets
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @jsonSecret
RETURN
END
-- Note: The oneDrive.json file we used for testing is 4824 bytes in size,
-- which exceeds the maximum size (2560 bytes) allowed by the Windows Credentials Manager.
-- When the size is too large, Chilkat will first compress the content of the secret.
-- If the compressed size is small enough, then it is stored compressed without splitting.
-- Otherwise the compressed data is split
-- Your application does not need to know how the secret is stored in the Windows Credentials Manager.
-- When fetching the secret, Chilkat automatically decompresses and re-composes from parts.
-- Create or update the secret.
EXEC sp_OAMethod @secrets, 'UpdateSecretJson', @success OUT, @json, @jsonSecret
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @secrets, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @secrets
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @jsonSecret
RETURN
END
-- This is the auto-split secret viewed in the Windows Credentials Manager:
--
-- Note: If you delete the auto-split secret by calling Chilkat's DeleteSecret method,
-- the parts are automatically deleted.
-- Also, if you update the secret, the old parts are automatically deleted and new parts are created.
PRINT 'Success'
EXEC @hr = sp_OADestroy @secrets
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @jsonSecret
END
GO