How to view security permissions for encryption keys in SQL server Is there a way to view the security permissions assigned for encryption keys in SQL Server? Furthermore, where are all these keys stored?
Without going into a long discussion about certificates and keys, I'm just going to give you what you need to create some keys, grant some access to them and then review the access granted.

I've included certificates because your keys depend upon them if you chose ENCRYPTION BY CERTIFICATE.

USE SOME_DATABASE;
GO


-- assuming you have a login testuser

CREATE USER testuser FOR login testuser
GO

--Create a database master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'my_Strong_Password'
GO


CREATE CERTIFICATE MyCertificateName
WITH SUBJECT = 'A label for this certificate'

-- Grant control on certificate to testuser
GRANT CONTROL ON CERTIFICATE::MyCertificateName TO testuser


-- create a SYMMETRIC key
CREATE SYMMETRIC KEY MySymmetricKeyName WITH
IDENTITY_VALUE = 'a fairly secure name',
ALGORITHM = AES_256,
KEY_SOURCE = 'a very secure strong password or phrase'
ENCRYPTION BY CERTIFICATE MyCertificateName;

-- grant control on symmetrick key to testuser
GRANT CONTROL ON SYMMETRIC KEY::MySymmetricKeyName TO testuser;

-- create ASYMMETRIC key
CREATE ASYMMETRIC KEY MyASymmetricKeyName 
    WITH ALGORITHM = RSA_2048 
    ENCRYPTION BY PASSWORD = 'my_Strong_Password'; 
GO

-- grant control and alter on asymmetric key to testuer
GRANT CONTROL ON ASYMMETRIC KEY::MyASymmetricKeyName TO testuser;
GRANT ALTER ON ASYMMETRIC KEY::MyASymmetricKeyName TO testuser;




-- display permissions for those certificates and keys we just created

declare @sql as nvarchar(max)
declare @db_name as nvarchar(max) = 'some_database'

SET @sql = '
SELECT ''' + @db_name + ''' as database_name, 
CASE dperms.state_desc
WHEN ''GRANT_WITH_GRANT_OPTION'' THEN ''GRANT''
ELSE state_desc 
END
+ '' '' + permission_name + '' ON '' + 
CASE dperms.class
WHEN 0 THEN ''DATABASE::['' + DB_NAME() + '']''
WHEN 1 THEN
CASE dperms.minor_id
WHEN 0 THEN ''OBJECT::['' + sch.[name] + ''].['' + obj.[name] + '']''
ELSE ''OBJECT::['' + sch.[name] + ''].['' + obj.[name] + ''] (['' + col.[name] + ''])''
END
WHEN 3 THEN ''SCHEMA::['' + SCHEMA_NAME(major_id) + '']''
WHEN 24 THEN ''SYMMETRIC KEY::['' + symm.[name] + '']''
WHEN 25 THEN ''CERTIFICATE::['' + certs.[name] + '']''
WHEN 26 THEN ''ASYMMETRIC KEY::['' + asymm.[name] +'']''
END
+ '' TO ['' + dprins.[name] + '']'' +
CASE dperms.state_desc
WHEN ''GRANT_WITH_GRANT_OPTION'' THEN '' WITH GRANT OPTION;''
ELSE '';''
END COLLATE database_default AS ''Permission''
FROM [' + @db_name + '].sys.database_permissions dperms
INNER JOIN [' + @db_name + '].sys.database_principals dprins
ON dperms.grantee_principal_id = dprins.principal_id
LEFT JOIN [' + @db_name + '].sys.columns col
ON dperms.major_id = col.object_id AND dperms.minor_id = col.column_id
LEFT JOIN [' + @db_name + '].sys.objects obj
ON dperms.major_id = obj.object_id
LEFT JOIN [' + @db_name + '].sys.schemas sch
ON obj.schema_id = sch.schema_id
LEFT JOIN [' + @db_name + '].sys.asymmetric_keys asymm
ON dperms.major_id = asymm.asymmetric_key_id
LEFT JOIN [' + @db_name + '].sys.symmetric_keys symm
ON dperms.major_id = symm.symmetric_key_id
LEFT JOIN [' + @db_name + '].sys.certificates certs
ON dperms.major_id = certs.certificate_id
WHERE dperms.type &lt;&gt; ''CO''
AND dperms.major_id &gt; 0
and dperms.grantee_principal_id &gt; 4
and dperms.class in (24, 25, 26)
;'


print @sql
execute(@sql)


Aside from the service master key which is created automatically and stored in the master database, the master key, certificate and symmetric, asymmetric keys would be stored in the databases you created them in.