SQL Server
SQL Server
Windows Credentials Manager / Apple Keychain - List All Secrets
See more Secrets Examples
On Windows, lists all secrets in the Windows Credentials Manager.On MacOS or iOS, lists all secrets in the Apple Keychain.
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
-- On Windows, this is the Windows Credentials Manager
-- On MacOS/iOS, it is the Apple Keychain
EXEC sp_OASetProperty @secrets, 'Location', 'local_manager'
-- Pass an empty JSON object to list all secrets.
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
DECLARE @results int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @results OUT
EXEC sp_OASetProperty @results, 'EmitCompact', 0
EXEC sp_OAMethod @secrets, 'ListSecrets', @success OUT, @json, @results
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 @results
RETURN
END
EXEC sp_OAMethod @results, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- Sample output on Windows (listing all secrets contained in the Windows Credentials Manager)
-- The "targetName" is purely informational and indicates the raw TargetName of the secret (i.e. Credential) stored in the Credentials Manager.
-- Code for parsing (iterating) the JSON results is shown below..
-- {
-- "secrets": [
-- {
-- "appName": "Test",
-- "service": "MyService",
-- "domain": "Xyz",
-- "username": "MySecret",
-- "targetName": "Test/MyService/Xyz/MySecret"
-- },
-- {
-- "appName": "Chilkat",
-- "service": "TestSplit",
-- "domain": "local",
-- "username": "Matt",
-- "targetName": "Chilkat/TestSplit/local/Matt"
-- },
-- {
-- "appName": "Test2",
-- "service": "Custom",
-- "domain": "Ocean",
-- "username": "Starfish20",
-- "targetName": "Test2/Custom/Ocean/Starfish20"
-- },
-- {
-- "service": "VS Code Azure",
-- "domain": "",
-- "username": "Azure",
-- "targetName": "VS Code Azure/Azure"
-- },
-- {
-- "appName": "Test2",
-- "service": "Custom",
-- "domain": "Ocean",
-- "username": "Starfish",
-- "targetName": "Test2/Custom/Ocean/Starfish"
-- },
-- {
-- "appName": "AA_MyApp",
-- "service": "OAuth2",
-- "domain": "onedrive",
-- "username": "matt",
-- "targetName": "AA_MyApp/OAuth2/onedrive/matt"
-- }
-- ]
-- }
-- ---------------------------------------------------------------------------------------
-- Here's sample output for listing secrets on MacOS
-- Some are secrets created using Chilkat's API, others are pre-existing secrets.
-- The "keyChainService" and "keyChainAccount" members are purely informational and show the raw Apple Keychain Service and Account information for the secret.
-- {
-- "secrets": [
-- {
-- "service": "com.apple.scopedbookmarksagent.xpc",
-- "username": "com.apple.scopedbookmarksagent.xpc",
-- "keyChainService": "com.apple.scopedbookmarksagent.xpc",
-- "keyChainAccount": "com.apple.scopedbookmarksagent.xpc"
-- },
-- {
-- "service": "StandaloneBeacon",
-- "username": "searchparty",
-- "keyChainService": "StandaloneBeacon",
-- "keyChainAccount": "searchparty"
-- },
-- {
-- "service": "BeaconStore",
-- "username": "BeaconStoreKey",
-- "keyChainService": "BeaconStore",
-- "keyChainAccount": "BeaconStoreKey"
-- },
-- {
-- "service": "LocalStorage",
-- "username": "findmylocate",
-- "keyChainService": "LocalStorage",
-- "keyChainAccount": "findmylocate"
-- },
-- {
-- "service": "ProtectedCloudStorage",
-- "username": "default",
-- "keyChainService": "ProtectedCloudStorage",
-- "keyChainAccount": "default"
-- },
-- {
-- "service": "CloudStorage",
-- "username": "findmylocate",
-- "keyChainService": "CloudStorage",
-- "keyChainAccount": "findmylocate"
-- },
-- {
-- "service": "CloudKitCache",
-- "username": "FindMyCloudKit",
-- "keyChainService": "CloudKitCache",
-- "keyChainAccount": "FindMyCloudKit"
-- },
-- {
-- "service": "com.apple.continuity.encryption",
-- "username": "handoff-own-encryption-key",
-- "keyChainService": "com.apple.continuity.encryption",
-- "keyChainAccount": "handoff-own-encryption-key"
-- },
-- {
-- "service": "com.apple.NetworkServiceProxy.ProxyToken",
-- "username": "CloudFlare",
-- "keyChainService": "com.apple.NetworkServiceProxy.ProxyToken",
-- "keyChainAccount": "CloudFlare"
-- },
-- {
-- "appName": "Chilkat",
-- "service": "çözツ新",
-- "domain": "local",
-- "username": "Matt",
-- "keyChainService": "Chilkat/çözツ新",
-- "keyChainAccount": "local/Matt"
-- },
-- {
-- "service": "AirPort",
-- "username": "FP Public WiFi",
-- "keyChainService": "AirPort",
-- "keyChainAccount": "FP Public WiFi"
-- }
-- ]
-- }
-- ---------------------------------------------------------------------------------------
-- Here's sample code for parsing the JSON list of secrets.
DECLARE @appName nvarchar(4000)
DECLARE @service nvarchar(4000)
DECLARE @domain nvarchar(4000)
DECLARE @username nvarchar(4000)
DECLARE @targetName nvarchar(4000)
DECLARE @keyChainService nvarchar(4000)
DECLARE @keyChainAccount nvarchar(4000)
DECLARE @i int
SELECT @i = 0
DECLARE @count_i int
EXEC sp_OAMethod @results, 'SizeOfArray', @count_i OUT, 'secrets'
WHILE @i < @count_i
BEGIN
EXEC sp_OASetProperty @results, 'I', @i
EXEC sp_OAMethod @results, 'StringOf', @appName OUT, 'secrets[i].appName'
EXEC sp_OAMethod @results, 'StringOf', @service OUT, 'secrets[i].service'
EXEC sp_OAMethod @results, 'StringOf', @domain OUT, 'secrets[i].domain'
EXEC sp_OAMethod @results, 'StringOf', @username OUT, 'secrets[i].username'
EXEC sp_OAMethod @results, 'StringOf', @targetName OUT, 'secrets[i].targetName'
EXEC sp_OAMethod @results, 'StringOf', @keyChainService OUT, 'secrets[i].keyChainService'
EXEC sp_OAMethod @results, 'StringOf', @keyChainAccount OUT, 'secrets[i].keyChainAccount'
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @secrets
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @results
END
GO