mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
194 lines
5.7 KiB
Transact-SQL
194 lines
5.7 KiB
Transact-SQL
SET ANSI_NULLS ON
|
|
GO
|
|
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
CREATE TABLE [dbo].[Employees](
|
|
[EmployeeID] [int] IDENTITY(1,1) NOT NULL,
|
|
[SSN] [char](11) NOT NULL,
|
|
[FirstName] [nvarchar](50) NOT NULL,
|
|
[LastName] [nvarchar](50) NOT NULL,
|
|
[Salary] [money] NOT NULL
|
|
)
|
|
WITH
|
|
(
|
|
SYSTEM_VERSIONING = ON,
|
|
LEDGER = ON
|
|
);
|
|
GO
|
|
|
|
|
|
CREATE TABLE [dbo].[AuditEvents](
|
|
[Timestamp] [Datetime2] NOT NULL DEFAULT (SYSDATETIMEOFFSET()),
|
|
[UserName] [nvarchar](255) NOT NULL,
|
|
[Query] [nvarchar](4000) NOT NULL
|
|
)
|
|
WITH (LEDGER = ON (APPEND_ONLY = ON));
|
|
GO
|
|
|
|
CREATE TABLE [dbo].[LedgerVerifications](
|
|
[Timestamp] [Datetime2] NOT NULL DEFAULT (SYSDATETIMEOFFSET()),
|
|
[DigestLocations] [nvarchar](max) NOT NULL,
|
|
[Result] [nvarchar](255) NOT NULL,
|
|
)
|
|
WITH (LEDGER = ON (APPEND_ONLY = ON));
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[GetEmployeeLedgerEntries]
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
SELECT
|
|
t.[commit_time] AS [CommitTime]
|
|
, t.[principal_name] AS [UserName]
|
|
, l.EmployeeId
|
|
, l.[SSN]
|
|
, l.[FirstName]
|
|
, l.[LastName]
|
|
, l.[Salary]
|
|
, l.[ledger_operation_type_desc] AS Operation
|
|
FROM [dbo].[Employees_Ledger] l
|
|
JOIN sys.database_ledger_transactions t
|
|
ON t.transaction_id = l.ledger_transaction_id
|
|
WHERE t.[commit_time] > DATEADD(MINUTE, -10, SYSDATETIMEOFFSET())
|
|
ORDER BY t.commit_time DESC;
|
|
END;
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[VerifyLedger]
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
DECLARE @digest_locations NVARCHAR(MAX) = (SELECT path, last_digest_block_id, is_current FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);
|
|
BEGIN TRY
|
|
EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
|
|
INSERT INTO [dbo].[LedgerVerifications] ([DigestLocations], [Result]) VALUES (@digest_locations, N'Success')
|
|
END TRY
|
|
BEGIN CATCH
|
|
INSERT INTO [dbo].[LedgerVerifications] ([DigestLocations], [Result]) VALUES (@digest_locations, N'Failure')
|
|
END CATCH
|
|
END;
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[GetLedgerVerifications]
|
|
AS
|
|
SET NOCOUNT ON
|
|
BEGIN
|
|
SELECT *
|
|
FROM [dbo].[LedgerVerifications]
|
|
WHERE [Timestamp] > DATEADD(MINUTE, -60, SYSDATETIMEOFFSET())
|
|
ORDER BY [Timestamp] DESC;
|
|
END;
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[GetAuditEvents]
|
|
AS
|
|
SET NOCOUNT ON
|
|
BEGIN
|
|
SELECT *
|
|
FROM [dbo].[AuditEvents]
|
|
WHERE [Timestamp] > DATEADD(MINUTE, -10, SYSDATETIMEOFFSET())
|
|
ORDER BY [Timestamp] DESC;
|
|
END;
|
|
GO
|
|
|
|
CREATE TABLE [AspNetRoles] (
|
|
[Id] nvarchar(450) NOT NULL,
|
|
[Name] nvarchar(256) NULL,
|
|
[NormalizedName] nvarchar(256) NULL,
|
|
[ConcurrencyStamp] nvarchar(max) NULL,
|
|
CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetUsers] (
|
|
[Id] nvarchar(450) NOT NULL,
|
|
[UserName] nvarchar(256) NULL,
|
|
[NormalizedUserName] nvarchar(256) NULL,
|
|
[Email] nvarchar(256) NULL,
|
|
[NormalizedEmail] nvarchar(256) NULL,
|
|
[EmailConfirmed] bit NOT NULL,
|
|
[PasswordHash] nvarchar(max) NULL,
|
|
[SecurityStamp] nvarchar(max) NULL,
|
|
[ConcurrencyStamp] nvarchar(max) NULL,
|
|
[PhoneNumber] nvarchar(max) NULL,
|
|
[PhoneNumberConfirmed] bit NOT NULL,
|
|
[TwoFactorEnabled] bit NOT NULL,
|
|
[LockoutEnd] datetimeoffset NULL,
|
|
[LockoutEnabled] bit NOT NULL,
|
|
[AccessFailedCount] int NOT NULL,
|
|
CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id])
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetRoleClaims] (
|
|
[Id] int NOT NULL IDENTITY,
|
|
[RoleId] nvarchar(450) NOT NULL,
|
|
[ClaimType] nvarchar(max) NULL,
|
|
[ClaimValue] nvarchar(max) NULL,
|
|
CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]),
|
|
CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetUserClaims] (
|
|
[Id] int NOT NULL IDENTITY,
|
|
[UserId] nvarchar(450) NOT NULL,
|
|
[ClaimType] nvarchar(max) NULL,
|
|
[ClaimValue] nvarchar(max) NULL,
|
|
CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]),
|
|
CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetUserLogins] (
|
|
[LoginProvider] nvarchar(128) NOT NULL,
|
|
[ProviderKey] nvarchar(128) NOT NULL,
|
|
[ProviderDisplayName] nvarchar(max) NULL,
|
|
[UserId] nvarchar(450) NOT NULL,
|
|
CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]),
|
|
CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetUserRoles] (
|
|
[UserId] nvarchar(450) NOT NULL,
|
|
[RoleId] nvarchar(450) NOT NULL,
|
|
CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]),
|
|
CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,
|
|
CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
|
|
CREATE TABLE [AspNetUserTokens] (
|
|
[UserId] nvarchar(450) NOT NULL,
|
|
[LoginProvider] nvarchar(128) NOT NULL,
|
|
[Name] nvarchar(128) NOT NULL,
|
|
[Value] nvarchar(max) NULL,
|
|
CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]),
|
|
CONSTRAINT [FK_AspNetUserTokens_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
|
|
|
|
CREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]);
|
|
GO
|
|
|
|
CREATE UNIQUE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL;
|
|
GO
|
|
|
|
CREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]);
|
|
GO
|
|
|
|
CREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]);
|
|
GO
|
|
|
|
CREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]);
|
|
GO
|
|
|
|
CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]);
|
|
GO
|
|
|
|
CREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]) WHERE [NormalizedUserName] IS NOT NULL;
|
|
GO |