mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
[SM-823] ApiKey table follow up (#3183)
* dbo_future -> dbo * DbScripts_future -> DbScripts * Remove deprecated property * Move data_migration -> DbScripts
This commit is contained in:
@ -0,0 +1,42 @@
|
||||
/*
|
||||
This is the data migration script for the client secret hash updates.
|
||||
The initial migration util/Migrator/DbScripts/2023-05-16_00_ClientSecretHash.sql should be run prior.
|
||||
The final migration is in util/Migrator/DbScripts/2023-08-10_01_RemoveClientSecret
|
||||
*/
|
||||
IF COL_LENGTH('[dbo].[ApiKey]', 'ClientSecretHash') IS NOT NULL AND COL_LENGTH('[dbo].[ApiKey]', 'ClientSecret') IS NOT NULL
|
||||
BEGIN
|
||||
|
||||
-- Add index
|
||||
IF NOT EXISTS(SELECT name FROM sys.indexes WHERE name = 'IX_ApiKey_ClientSecretHash')
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX [IX_ApiKey_ClientSecretHash]
|
||||
ON [dbo].[ApiKey]([ClientSecretHash] ASC)
|
||||
WITH (ONLINE = ON)
|
||||
END
|
||||
|
||||
-- Data Migration
|
||||
DECLARE @BatchSize INT = 10000
|
||||
WHILE @BatchSize > 0
|
||||
BEGIN
|
||||
BEGIN TRANSACTION Migrate_ClientSecretHash
|
||||
|
||||
UPDATE TOP(@BatchSize) [dbo].[ApiKey]
|
||||
SET ClientSecretHash = (
|
||||
SELECT CAST(N'' AS XML).value('xs:base64Binary(sql:column("HASH"))', 'VARCHAR(128)')
|
||||
FROM (
|
||||
SELECT HASHBYTES('SHA2_256', [ClientSecret]) AS HASH
|
||||
) SRC
|
||||
)
|
||||
WHERE [ClientSecretHash] IS NULL
|
||||
|
||||
SET @BatchSize = @@ROWCOUNT
|
||||
|
||||
COMMIT TRANSACTION Migrate_ClientSecretHash
|
||||
END
|
||||
|
||||
-- Drop index
|
||||
DROP INDEX IF EXISTS [IX_ApiKey_ClientSecretHash]
|
||||
ON [dbo].[ApiKey];
|
||||
|
||||
END
|
||||
GO
|
65
util/Migrator/DbScripts/2023-08-10_01_RemoveClientSecret.sql
Normal file
65
util/Migrator/DbScripts/2023-08-10_01_RemoveClientSecret.sql
Normal file
@ -0,0 +1,65 @@
|
||||
-- Remove Column
|
||||
IF COL_LENGTH('[dbo].[ApiKey]', 'ClientSecret') IS NOT NULL
|
||||
BEGIN
|
||||
ALTER TABLE
|
||||
[dbo].[ApiKey]
|
||||
DROP COLUMN
|
||||
[ClientSecret]
|
||||
END
|
||||
GO
|
||||
|
||||
-- Refresh views
|
||||
IF OBJECT_ID('[dbo].[ApiKeyDetailsView]') IS NOT NULL
|
||||
BEGIN
|
||||
EXECUTE sp_refreshview N'[dbo].[ApiKeyDetailsView]';
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('[dbo].[ApiKeyView]') IS NOT NULL
|
||||
BEGIN
|
||||
EXECUTE sp_refreshview N'[dbo].[ApiKeyView]';
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[ApiKey_Create]
|
||||
@Id UNIQUEIDENTIFIER OUTPUT,
|
||||
@ServiceAccountId UNIQUEIDENTIFIER,
|
||||
@Name VARCHAR(200),
|
||||
@ClientSecretHash VARCHAR(128),
|
||||
@Scope NVARCHAR(4000),
|
||||
@EncryptedPayload NVARCHAR(4000),
|
||||
@Key VARCHAR(MAX),
|
||||
@ExpireAt DATETIME2(7),
|
||||
@CreationDate DATETIME2(7),
|
||||
@RevisionDate DATETIME2(7)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
INSERT INTO [dbo].[ApiKey]
|
||||
(
|
||||
[Id],
|
||||
[ServiceAccountId],
|
||||
[Name],
|
||||
[ClientSecretHash],
|
||||
[Scope],
|
||||
[EncryptedPayload],
|
||||
[Key],
|
||||
[ExpireAt],
|
||||
[CreationDate],
|
||||
[RevisionDate]
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@Id,
|
||||
@ServiceAccountId,
|
||||
@Name,
|
||||
@ClientSecretHash,
|
||||
@Scope,
|
||||
@EncryptedPayload,
|
||||
@Key,
|
||||
@ExpireAt,
|
||||
@CreationDate,
|
||||
@RevisionDate
|
||||
)
|
||||
END
|
Reference in New Issue
Block a user