The meta data is from an SQL 2012 Server.
I have posted alot more, find the whole list here.
Goto Definition or MetaData
Definition:
sys.sp_resign_database(nvarchar @keytype, nvarchar @fn
, nvarchar @pwd)
MetaData:
create proc sys.sp_resign_database @keytype sysname, @fn nvarchar(512), @pwd sysname = Null as begin declare @thumbprint varbinary(32) declare @keyname sysname declare @stmt nvarchar(1024) declare @randomname sysname declare @iter int declare @hasmasterkey int if @pwd is NULL SELECT @pwd = 'Yukon90!!!!_!#@1234567890_' -- ensure that there are no outer transaction set implicit_transactions off if (@@trancount > 0) begin raiserror(15002,-1,-1,'sys.sp_resign_database') return (1) end -- Key type should be asymmetric key if (LOWER(@keytype) <> 'ASYMMETRIC KEY') begin raiserror(2561,-1,-1, 0) return (1) end -- Obtain key thumprint select @thumbprint = get_publickey_token_from_file(@keytype, @fn) if (@thumbprint is null) begin raiserror(15208,-1,-1) return (1) end -- Begin transaction BEGIN TRANSACTION -- Check if there is a master key in the database -- If there is none, create one select @hasmasterkey = count(*) from sys.symmetric_keys where symmetric_key_id = 101 if (@hasmasterkey = 0) begin select @stmt = 'CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' + quotename(@pwd,'''') exec (@stmt) if (@@error <> 0) begin ROLLBACK TRANSACTION return (1) end end -- See if the key exists in the database already select @keyname = name from sys.asymmetric_keys where thumbprint = @thumbprint -- if there is a key, drop all encryptions and the key from the database if (@keyname is not null) begin -- first drop all signatures from the database by that key select @stmt = 'DROP SIGNATURE FROM DATABASE :: ' select @stmt = @stmt + quotename(db_name(), '[') select @stmt = @stmt + ' BY ' select @stmt = @stmt + @keytype select @stmt = @stmt + quotename(@keyname, '[') exec (@stmt) if (@@error <> 0) begin ROLLBACK TRANSACTION return (1) end -- then drop the key select @stmt = 'DROP ' select @stmt = @stmt + @keytype select @stmt = @stmt + ' ' select @stmt = @stmt + quotename(@keyname, '[') exec (@stmt) if @@error <> 0 begin ROLLBACK TRANSACTION return (1) end end -- compute the name of a new key and create the key -- try 10 times to avoid accidental race conditions select @iter = 1 while (@iter < 10) begin select @randomname = N'INT_' + convert(nvarchar(128), newid()) select @stmt = 'CREATE ' select @stmt = @stmt + @keytype select @stmt = @stmt + ' ' select @stmt = @stmt + quotename(@randomname, '[') select @stmt = @stmt + ' FROM FILE = ' select @stmt = @stmt + quotename(@fn, '''') exec (@stmt) if (@@error = 0) select @iter = 10 else if (@iter = 9) begin -- UNDONE: Give an error message ROLLBACK TRANSACTION return (1) end end -- compute statement to generate signature and execute it select @stmt = 'ADD SIGNATURE TO DATABASE :: ' select @stmt = @stmt + quotename(db_name(), '[') select @stmt = @stmt + ' BY ' select @stmt = @stmt + @keytype select @stmt = @stmt + quotename(@randomname, '[') exec (@stmt) if (@@error <> 0) begin ROLLBACK TRANSACTION return (1) end -- compute statement to drop the private key select @stmt = 'ALTER ' select @stmt = @stmt + @keytype select @stmt = @stmt + ' ' select @stmt = @stmt + quotename(@randomname, '[') select @stmt = @stmt + ' REMOVE PRIVATE KEY' exec (@stmt) if (@@error <> 0) begin ROLLBACK TRANSACTION return (1) end -- finally, if the master key was created, drop it if (@hasmasterkey = 0) begin select @stmt = 'DROP MASTER KEY' exec (@stmt) if (@@error <> 0) begin ROLLBACK TRANSACTION return (1) end end COMMIT TRANSACTION return (0) end
No comments:
Post a Comment