[성현모] AuthApi 분리
This commit is contained in:
18
Projects/SystemX.Core/DBPatch/CreateAccountDB.bat
Normal file
18
Projects/SystemX.Core/DBPatch/CreateAccountDB.bat
Normal file
@ -0,0 +1,18 @@
|
||||
@echo off
|
||||
::log
|
||||
IF NOT EXIST .\logs mkdir logs
|
||||
|
||||
::서버연결정보
|
||||
SET ServerIP=127.0.0.1
|
||||
SET ServerPort=1433
|
||||
|
||||
::DB 정보
|
||||
SET UserID=SystemX
|
||||
SET Passwd=X
|
||||
SET DBName=AccountDB
|
||||
|
||||
::Default DB
|
||||
@echo off
|
||||
CD .\sqlScripts\
|
||||
CALL _CreateScript.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
|
||||
CALL _CreateScript.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV
|
||||
25
Projects/SystemX.Core/DBPatch/UpdateAccountDB.bat
Normal file
25
Projects/SystemX.Core/DBPatch/UpdateAccountDB.bat
Normal file
@ -0,0 +1,25 @@
|
||||
@echo off
|
||||
::log
|
||||
IF NOT EXIST .\logs mkdir logs
|
||||
|
||||
::서버연결정보
|
||||
SET ServerIP=127.0.0.1
|
||||
SET ServerPort=1433
|
||||
|
||||
::DB 정보
|
||||
SET UserID=SystemX
|
||||
SET Passwd=X
|
||||
SET DBName=AccountDB
|
||||
|
||||
::Update script 정보
|
||||
SET Dacpac=.\dacpac\SystemX.DB.AccountDB.dacpac
|
||||
SET OUTPUT=SystemX.DB.AccountDB_Update.sql
|
||||
|
||||
@echo off
|
||||
::generate update script
|
||||
CD .\sqlScripts\
|
||||
CALL _UpdateScriptGenerate.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% %Dacpac% %OUTPUT%
|
||||
|
||||
::Default DB
|
||||
CALL _UpdateAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%
|
||||
CALL _UpdateAccountDB.bat %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV
|
||||
@ -0,0 +1,19 @@
|
||||
@echo Create Admin Account Start
|
||||
@echo off
|
||||
|
||||
SET SqlCmdOption=-E -C
|
||||
sqlcmd %SqlCmdOption% -i %~dp0\sqlScripts\AdminAccount_Create.sql
|
||||
if errorlevel 1 goto errexit
|
||||
goto end
|
||||
:errexit
|
||||
echo DB Patch Fail
|
||||
goto end
|
||||
:end
|
||||
@echo on
|
||||
|
||||
@echo Create Admin Account End
|
||||
|
||||
net stop /y MSSQLSERVER
|
||||
net start /y MSSQLSERVER
|
||||
|
||||
pause
|
||||
@ -0,0 +1,43 @@
|
||||
USE [master]
|
||||
GO
|
||||
|
||||
CREATE LOGIN [SystemX] WITH PASSWORD=N'X', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[English], CHECK_POLICY=ON
|
||||
GO
|
||||
|
||||
ALTER LOGIN [SystemX] ENABLE
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [sysadmin] ADD MEMBER [SystemX]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [securityadmin] ADD MEMBER [SystemX]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [serveradmin] ADD MEMBER [SystemX]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [setupadmin] ADD MEMBER [SystemX]
|
||||
GO
|
||||
|
||||
|
||||
|
||||
USE [master]
|
||||
GO
|
||||
|
||||
CREATE LOGIN [Alis] WITH PASSWORD=N'Kefico!@34', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[English], CHECK_POLICY=ON
|
||||
GO
|
||||
|
||||
ALTER LOGIN [Alis] ENABLE
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [sysadmin] ADD MEMBER [Alis]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [securityadmin] ADD MEMBER [Alis]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [serveradmin] ADD MEMBER [Alis]
|
||||
GO
|
||||
|
||||
ALTER SERVER ROLE [setupadmin] ADD MEMBER [Alis]
|
||||
GO
|
||||
@ -0,0 +1,346 @@
|
||||
/*
|
||||
SystemX.DB.AccountDB의 배포 스크립트
|
||||
|
||||
이 코드는 도구를 사용하여 생성되었습니다.
|
||||
파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
|
||||
변경 내용이 손실됩니다.
|
||||
*/
|
||||
|
||||
GO
|
||||
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
|
||||
|
||||
SET NUMERIC_ROUNDABORT OFF;
|
||||
|
||||
|
||||
GO
|
||||
/*
|
||||
:setvar DatabaseName "SystemX.DB.AccountDB"
|
||||
:setvar DefaultFilePrefix "SystemX.DB.AccountDB"
|
||||
:setvar DefaultDataPath ""
|
||||
:setvar DefaultLogPath ""
|
||||
*/
|
||||
|
||||
GO
|
||||
:on error exit
|
||||
GO
|
||||
/*
|
||||
SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다.
|
||||
SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다.
|
||||
SET NOEXEC OFF;
|
||||
*/
|
||||
:setvar __IsSqlCmdEnabled "True"
|
||||
GO
|
||||
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
|
||||
BEGIN
|
||||
PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.';
|
||||
SET NOEXEC ON;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
USE [master];
|
||||
|
||||
|
||||
GO
|
||||
|
||||
IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
|
||||
DROP DATABASE [$(DatabaseName)];
|
||||
END
|
||||
|
||||
GO
|
||||
PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...'
|
||||
GO
|
||||
CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS
|
||||
GO
|
||||
USE [$(DatabaseName)];
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET ANSI_NULLS ON,
|
||||
ANSI_PADDING ON,
|
||||
ANSI_WARNINGS ON,
|
||||
ARITHABORT ON,
|
||||
CONCAT_NULL_YIELDS_NULL ON,
|
||||
NUMERIC_ROUNDABORT OFF,
|
||||
QUOTED_IDENTIFIER ON,
|
||||
ANSI_NULL_DEFAULT ON,
|
||||
CURSOR_DEFAULT LOCAL,
|
||||
RECOVERY FULL,
|
||||
CURSOR_CLOSE_ON_COMMIT OFF,
|
||||
AUTO_CREATE_STATISTICS ON,
|
||||
AUTO_SHRINK OFF,
|
||||
AUTO_UPDATE_STATISTICS ON,
|
||||
RECURSIVE_TRIGGERS OFF
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET ALLOW_SNAPSHOT_ISOLATION OFF;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET READ_COMMITTED_SNAPSHOT OFF
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET AUTO_UPDATE_STATISTICS_ASYNC OFF,
|
||||
PAGE_VERIFY NONE,
|
||||
DATE_CORRELATION_OPTIMIZATION OFF,
|
||||
DISABLE_BROKER,
|
||||
PARAMETERIZATION SIMPLE,
|
||||
SUPPLEMENTAL_LOGGING OFF
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
|
||||
SET TRUSTWORTHY OFF,
|
||||
DB_CHAINING OFF
|
||||
WITH ROLLBACK IMMEDIATE';
|
||||
END
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF IS_SRVROLEMEMBER(N'sysadmin') = 1
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
|
||||
SET HONOR_BROKER_PRIORITY OFF
|
||||
WITH ROLLBACK IMMEDIATE';
|
||||
END
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.';
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET TARGET_RECOVERY_TIME = 0 SECONDS
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF),
|
||||
CONTAINMENT = NONE
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
|
||||
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
|
||||
DELAYED_DURABILITY = DISABLED
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100)
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET QUERY_STORE = OFF
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
|
||||
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
|
||||
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
|
||||
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
|
||||
ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
|
||||
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
|
||||
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
|
||||
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF EXISTS (SELECT 1
|
||||
FROM [master].[dbo].[sysdatabases]
|
||||
WHERE [name] = N'$(DatabaseName)')
|
||||
BEGIN
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET TEMPORAL_HISTORY_RETENTION ON
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
|
||||
EXECUTE sp_fulltext_database 'enable';
|
||||
|
||||
|
||||
GO
|
||||
PRINT N'테이블 [dbo].[tRefreshToken]을(를) 만드는 중...';
|
||||
|
||||
|
||||
GO
|
||||
CREATE TABLE [dbo].[tRefreshToken] (
|
||||
[cAuid] NVARCHAR (250) NOT NULL,
|
||||
[cRefreshToken] NVARCHAR (1000) NOT NULL,
|
||||
PRIMARY KEY CLUSTERED ([cAuid] ASC)
|
||||
);
|
||||
|
||||
|
||||
GO
|
||||
PRINT N'테이블 [dbo].[tRole]을(를) 만드는 중...';
|
||||
|
||||
|
||||
GO
|
||||
CREATE TABLE [dbo].[tRole] (
|
||||
[cAuid] NVARCHAR (250) NOT NULL,
|
||||
[cRoleID] TINYINT NOT NULL,
|
||||
[cRoleName] NVARCHAR (20) NOT NULL,
|
||||
PRIMARY KEY CLUSTERED ([cAuid] ASC)
|
||||
);
|
||||
|
||||
|
||||
GO
|
||||
PRINT N'테이블 [dbo].[tUser]을(를) 만드는 중...';
|
||||
|
||||
|
||||
GO
|
||||
CREATE TABLE [dbo].[tUser] (
|
||||
[cUserID] NVARCHAR (50) NOT NULL,
|
||||
[cAuid] NVARCHAR (250) NOT NULL,
|
||||
[cPasswordHashed] NVARCHAR (250) NOT NULL,
|
||||
[cState] TINYINT NOT NULL,
|
||||
[cCreateDateTime] DATETIME2 (7) NOT NULL,
|
||||
[cLastLoginDateTime] DATETIME2 (7) NULL,
|
||||
PRIMARY KEY CLUSTERED ([cUserID] ASC)
|
||||
);
|
||||
|
||||
|
||||
GO
|
||||
/*
|
||||
배포 후 스크립트 템플릿
|
||||
--------------------------------------------------------------------------------------
|
||||
이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다.
|
||||
SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다.
|
||||
예: :r .\myfile.sql
|
||||
SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다.
|
||||
예: :setvar TableName MyTable
|
||||
SELECT * FROM [$(TableName)]
|
||||
--------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis')
|
||||
BEGIN
|
||||
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
|
||||
VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE());
|
||||
|
||||
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
|
||||
VALUES ('SuperUserAlis','20','SuperUser');
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX')
|
||||
BEGIN
|
||||
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
|
||||
VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE());
|
||||
|
||||
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
|
||||
VALUES ('SuperUserSystemX','20','SuperUser');
|
||||
END
|
||||
GO
|
||||
|
||||
GO
|
||||
DECLARE @VarDecimalSupported AS BIT;
|
||||
|
||||
SELECT @VarDecimalSupported = 0;
|
||||
|
||||
IF ((ServerProperty(N'EngineEdition') = 3)
|
||||
AND (((@@microsoftversion / power(2, 24) = 9)
|
||||
AND (@@microsoftversion & 0xffff >= 3024))
|
||||
OR ((@@microsoftversion / power(2, 24) = 10)
|
||||
AND (@@microsoftversion & 0xffff >= 1600))))
|
||||
SELECT @VarDecimalSupported = 1;
|
||||
|
||||
IF (@VarDecimalSupported > 0)
|
||||
BEGIN
|
||||
EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON';
|
||||
END
|
||||
|
||||
|
||||
GO
|
||||
ALTER DATABASE [$(DatabaseName)]
|
||||
SET MULTI_USER
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
|
||||
|
||||
GO
|
||||
PRINT N'업데이트가 완료되었습니다.';
|
||||
|
||||
|
||||
GO
|
||||
18
Projects/SystemX.Core/DBPatch/sqlScripts/_CreateScript.bat
Normal file
18
Projects/SystemX.Core/DBPatch/sqlScripts/_CreateScript.bat
Normal file
@ -0,0 +1,18 @@
|
||||
@echo off
|
||||
|
||||
SET ServerIP=%1
|
||||
SET ServerPort=%2
|
||||
SET UserID=%3
|
||||
SET Passwd=%4
|
||||
SET DBName=%5
|
||||
|
||||
SET SqlCmdOption=-C -U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -f 65001 -o ..\logs\%DBName%.log
|
||||
SET DatabaseName=%DBName%
|
||||
sqlcmd %SqlCmdOption% -i .\SystemX.DB.AccountDB_Create.sql
|
||||
if errorlevel 1 goto errexit
|
||||
goto end
|
||||
:errexit
|
||||
echo DB Patch Failed
|
||||
goto end
|
||||
:end
|
||||
@echo on
|
||||
@ -0,0 +1,19 @@
|
||||
@echo off
|
||||
|
||||
SET ServerIP=%1
|
||||
SET ServerPort=%2
|
||||
SET UserID=%3
|
||||
SET Passwd=%4
|
||||
SET DBName=%5
|
||||
|
||||
SET SqlCmdOption=-U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -d %DBName% -o ..\logs\%DBName%.log
|
||||
SET DatabaseName=%DBName%
|
||||
sqlcmd %SqlCmdOption% -i .\SystemX.DB.AccountDB_Update.sql
|
||||
|
||||
if errorlevel 1 goto errexit
|
||||
goto end
|
||||
:errexit
|
||||
echo DB Patch Fail
|
||||
goto end
|
||||
:end
|
||||
@echo on
|
||||
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
SET ServerIP=%1
|
||||
SET ServerPort=%2
|
||||
SET UserID=%3
|
||||
SET Passwd=%4
|
||||
SET DBName=%5
|
||||
SET Dacpac=%6
|
||||
SET OUTPUT=%7
|
||||
|
||||
::create update sql file
|
||||
sqlpackage /Action:Script /SourceFile:%Dacpac% /TargetConnectionString:"server=%ServerIP%,%ServerPort%; user id=%UserID%; password=%Passwd%; database=%DBName%; TrustServerCertificate=true" /OutputPath:".\%OUTPUT%" /p:CommentOutSetVarDeclarations=True
|
||||
Binary file not shown.
@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34728.123
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemX.Core", "SystemX.Core\SystemX.Core.csproj", "{F057A1E8-F5FF-4241-BEEA-1A57E971F379}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemX.Core", "SystemX.Core\SystemX.Core.csproj", "{F057A1E8-F5FF-4241-BEEA-1A57E971F379}"
|
||||
EndProject
|
||||
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "SystemX.DB.AccountDB\SystemX.DB.AccountDB.sqlproj", "{B44C85FA-BD31-419F-8481-477E166A5753}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -15,6 +17,12 @@ Global
|
||||
{F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
33
Projects/SystemX.Core/SystemX.Core/Config/Model/Auth.cs
Normal file
33
Projects/SystemX.Core/SystemX.Core/Config/Model/Auth.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Config.Model
|
||||
{
|
||||
public class Auth
|
||||
{
|
||||
//jwt common
|
||||
[JsonPropertyName("issuer")]
|
||||
public string? issuer { get; set; }
|
||||
|
||||
[JsonPropertyName("audience")]
|
||||
public string? audience { get; set; }
|
||||
|
||||
//access token
|
||||
[JsonPropertyName("accessTokenSecret")]
|
||||
public string? accessTokenSecret { get; set; }
|
||||
|
||||
[JsonPropertyName("accessTokenExpires")]
|
||||
public uint? accessTokenExpires { get; set; }
|
||||
|
||||
//refresh token
|
||||
[JsonPropertyName("refreshTokenSecret")]
|
||||
public string? refreshTokenSecret { get; set; }
|
||||
|
||||
[JsonPropertyName("refreshTokenExpires")]
|
||||
public uint? refreshTokenExpires { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SystemX.Core.DB.DBContext.AccountDB.Tables;
|
||||
|
||||
namespace SystemX.Core.DB.DBContext.AccountDB.Context;
|
||||
|
||||
public partial class AccountDbContext : DbContext
|
||||
{
|
||||
public AccountDbContext()
|
||||
{
|
||||
}
|
||||
|
||||
public AccountDbContext(DbContextOptions<AccountDbContext> options)
|
||||
: base(options)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual DbSet<TRefreshToken> TRefreshTokens { get; set; }
|
||||
|
||||
public virtual DbSet<TRole> TRoles { get; set; }
|
||||
|
||||
public virtual DbSet<TUser> TUsers { get; set; }
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
|
||||
=> optionsBuilder.UseSqlServer("server=127.0.0.1; user id=SystemX; password=X; database=AccountDB; TrustServerCertificate=true;");
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<TRefreshToken>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.CAuid).HasName("PK__tRefresh__FBF0855465EB95AB");
|
||||
|
||||
entity.ToTable("tRefreshToken");
|
||||
|
||||
entity.Property(e => e.CAuid)
|
||||
.HasMaxLength(250)
|
||||
.HasColumnName("cAuid");
|
||||
entity.Property(e => e.CRefreshToken)
|
||||
.HasMaxLength(1000)
|
||||
.HasColumnName("cRefreshToken");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<TRole>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.CAuid).HasName("PK__tRole__FBF085540BB887D7");
|
||||
|
||||
entity.ToTable("tRole");
|
||||
|
||||
entity.Property(e => e.CAuid)
|
||||
.HasMaxLength(250)
|
||||
.HasColumnName("cAuid");
|
||||
entity.Property(e => e.CRoleId).HasColumnName("cRoleID");
|
||||
entity.Property(e => e.CRoleName)
|
||||
.HasMaxLength(20)
|
||||
.HasColumnName("cRoleName");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<TUser>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.CUserId).HasName("PK__tUser__A75DC19A721265FF");
|
||||
|
||||
entity.ToTable("tUser");
|
||||
|
||||
entity.Property(e => e.CUserId)
|
||||
.HasMaxLength(50)
|
||||
.HasColumnName("cUserID");
|
||||
entity.Property(e => e.CAuid)
|
||||
.HasMaxLength(250)
|
||||
.HasColumnName("cAuid");
|
||||
entity.Property(e => e.CCreateDateTime).HasColumnName("cCreateDateTime");
|
||||
entity.Property(e => e.CLastLoginDateTime).HasColumnName("cLastLoginDateTime");
|
||||
entity.Property(e => e.CPasswordHashed)
|
||||
.HasMaxLength(250)
|
||||
.HasColumnName("cPasswordHashed");
|
||||
entity.Property(e => e.CState).HasColumnName("cState");
|
||||
});
|
||||
|
||||
OnModelCreatingPartial(modelBuilder);
|
||||
}
|
||||
|
||||
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SystemX.Core.DB.DBContext.AccountDB.Tables;
|
||||
|
||||
public partial class TRefreshToken
|
||||
{
|
||||
public string CAuid { get; set; } = null!;
|
||||
|
||||
public string CRefreshToken { get; set; } = null!;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SystemX.Core.DB.DBContext.AccountDB.Tables;
|
||||
|
||||
public partial class TRole
|
||||
{
|
||||
public string CAuid { get; set; } = null!;
|
||||
|
||||
public byte CRoleId { get; set; }
|
||||
|
||||
public string CRoleName { get; set; } = null!;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SystemX.Core.DB.DBContext.AccountDB.Tables;
|
||||
|
||||
public partial class TUser
|
||||
{
|
||||
public string CUserId { get; set; } = null!;
|
||||
|
||||
public string CAuid { get; set; } = null!;
|
||||
|
||||
public string CPasswordHashed { get; set; } = null!;
|
||||
|
||||
public byte CState { get; set; }
|
||||
|
||||
public DateTime CCreateDateTime { get; set; }
|
||||
|
||||
public DateTime? CLastLoginDateTime { get; set; }
|
||||
}
|
||||
32
Projects/SystemX.Core/SystemX.Core/ERROR_CODE.cs
Normal file
32
Projects/SystemX.Core/SystemX.Core/ERROR_CODE.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core
|
||||
{
|
||||
public enum ERROR_CODE
|
||||
{
|
||||
//기본 에러
|
||||
EC_NONE = 0,
|
||||
EC_OK = 1,
|
||||
|
||||
//DB 관련 에러
|
||||
EC_DEFAULT_ERROR = 1000,
|
||||
EC_DATABASE_ERROR = 1001,
|
||||
|
||||
//유저 관련 에러
|
||||
EC_USER_REGISTER_FAILED = 2000,
|
||||
EC_USER_REGISTER_EXIST = 2001,
|
||||
EC_USER_REGISTER_CONFIRM_PASSWORD_ERROR = 2002,
|
||||
|
||||
EC_USER_LOGIN_FAILED = 2100,
|
||||
EC_USER_LOGIN_NOT_EXIST = 2101,
|
||||
EC_USER_LOGIN_INVALID_PASSWORD = 2102,
|
||||
EC_USER_LOGIN_INAVTIVE = 2103,
|
||||
EC_USER_LOGIN_BLOCKED = 2104,
|
||||
|
||||
EC_USER_LOGOUT_FAILED = 2200
|
||||
}
|
||||
}
|
||||
@ -57,6 +57,8 @@ public static class Log4net
|
||||
|
||||
public static bool IsConfigLoad { get; set; } = false;
|
||||
|
||||
public static string Log4netConfigPath { get; } = @"../../Config/log4net.config";
|
||||
|
||||
//로그 사용여부
|
||||
public static bool IsDebugEnabled { get; set; } = true;
|
||||
public static bool IsDBEnabled { get; set; } = true;
|
||||
@ -70,7 +72,7 @@ public static class Log4net
|
||||
|
||||
static Log4net()
|
||||
{
|
||||
string log4netConfigPath = @"../Config/log4net.config";
|
||||
string log4netConfigPath = Log4netConfigPath;
|
||||
|
||||
if (File.Exists(log4netConfigPath) == true)
|
||||
{
|
||||
@ -82,7 +84,7 @@ public static class Log4net
|
||||
|
||||
IsConfigLoad = OpenConfig(log4netConfigPath);
|
||||
}
|
||||
|
||||
|
||||
private static bool OpenConfig(string path)
|
||||
{
|
||||
bool result = true;
|
||||
|
||||
34
Projects/SystemX.Core/SystemX.Core/Model/Auth/LoginModel.cs
Normal file
34
Projects/SystemX.Core/SystemX.Core/Model/Auth/LoginModel.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using log4net.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
//로그인 요청 모델
|
||||
public class LoginModel
|
||||
{
|
||||
[Required]
|
||||
public string? UserID { get; set; }
|
||||
|
||||
[Required]
|
||||
public string? Password { get; set; }
|
||||
}
|
||||
|
||||
//로그인 응답 모델
|
||||
public class LoginResponseModel
|
||||
{
|
||||
public string? UserID { get; set; }
|
||||
public UserRole Role { get; set; }
|
||||
public string? RoleName { get; set; }
|
||||
|
||||
public string? AccessToken { get; set; }
|
||||
public long AccessTokenExpired { get; set; }
|
||||
public string? RefreshToken { get; set; }
|
||||
|
||||
public ERROR_CODE? EC { get; set; }
|
||||
}
|
||||
}
|
||||
23
Projects/SystemX.Core/SystemX.Core/Model/Auth/LogoutModel.cs
Normal file
23
Projects/SystemX.Core/SystemX.Core/Model/Auth/LogoutModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using log4net.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
public class LogoutModel
|
||||
{
|
||||
[Required]
|
||||
public string? UserID { get; set; }
|
||||
}
|
||||
|
||||
public class LogoutResponseModel
|
||||
{
|
||||
public string? UserID { get; set; }
|
||||
|
||||
public ERROR_CODE? EC { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
using log4net.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
//유저 등록 모델
|
||||
public class RegisterModel
|
||||
{
|
||||
[Required]
|
||||
public string UserID { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public string PasswordConfirm { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public UserRole Role { get; set; } = UserRole.User;
|
||||
}
|
||||
|
||||
public class RegisterResponseModel
|
||||
{
|
||||
public string? UserID { get; set; }
|
||||
public UserRole Role { get; set; }
|
||||
public string? RoleName { get; set; }
|
||||
|
||||
public ERROR_CODE? EC { get; set; } = ERROR_CODE.EC_USER_REGISTER_FAILED;
|
||||
}
|
||||
}
|
||||
14
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserModel.cs
Normal file
14
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
public class UserModel
|
||||
{
|
||||
//public TUser? TUser { get; set; }
|
||||
//public TRole? TRole { get; set; }
|
||||
}
|
||||
}
|
||||
20
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserRole.cs
Normal file
20
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserRole.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
//User 권한
|
||||
public enum UserRole : byte
|
||||
{
|
||||
None = 0,
|
||||
Ananymous = 1,
|
||||
|
||||
User = 10,
|
||||
Admin = 11,
|
||||
|
||||
SuperUser = 20,
|
||||
}
|
||||
}
|
||||
15
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserState.cs
Normal file
15
Projects/SystemX.Core/SystemX.Core/Model/Auth/UserState.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SystemX.Core.Model.Auth
|
||||
{
|
||||
public enum UserState : byte
|
||||
{
|
||||
Inactive = 0,
|
||||
Active = 1,
|
||||
Block = 2
|
||||
}
|
||||
}
|
||||
@ -9,18 +9,26 @@
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<WarningLevel>9999</WarningLevel>
|
||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<WarningLevel>9999</WarningLevel>
|
||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CsvHelper" Version="33.0.1" />
|
||||
<PackageReference Include="log4net" Version="3.0.4" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.15" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.15" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.6" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<Name>SystemX.DB.AccountDB</Name>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectVersion>4.1</ProjectVersion>
|
||||
<ProjectGuid>{b44c85fa-bd31-419f-8481-477e166a5753}</ProjectGuid>
|
||||
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
|
||||
<OutputType>Database</OutputType>
|
||||
<RootPath>
|
||||
</RootPath>
|
||||
<RootNamespace>SystemX.DB.AccountDB</RootNamespace>
|
||||
<AssemblyName>SystemX.DB.AccountDB</AssemblyName>
|
||||
<ModelCollation>1042,CI</ModelCollation>
|
||||
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
|
||||
<DeployToDatabase>True</DeployToDatabase>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<TargetLanguage>CS</TargetLanguage>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<SqlServerVerification>False</SqlServerVerification>
|
||||
<IncludeCompositeObjects>True</IncludeCompositeObjects>
|
||||
<TargetDatabaseSet>True</TargetDatabaseSet>
|
||||
<GenerateCreateScript>True</GenerateCreateScript>
|
||||
<DefaultCollation>Korean_Wansung_CI_AS</DefaultCollation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
|
||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<DefineDebug>false</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<DefineDebug>true</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
|
||||
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
|
||||
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
|
||||
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
|
||||
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties" />
|
||||
<Folder Include="dbo" />
|
||||
<Folder Include="dbo\Functions" />
|
||||
<Folder Include="dbo\Scripts" />
|
||||
<Folder Include="dbo\StoredProcedures" />
|
||||
<Folder Include="dbo\Tables" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Build Include="dbo\Tables\tUser.sql" />
|
||||
<Build Include="dbo\Tables\tRole.sql" />
|
||||
<Build Include="dbo\Tables\tRefreshToken.sql" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PostDeploy Include="dbo\Scripts\scriptAfterBuild.sql" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)DBPatch\sqlScripts\
|
||||
|
||||
xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)DBPatch\sqlScripts\dacpac\</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,29 @@
|
||||
/*
|
||||
배포 후 스크립트 템플릿
|
||||
--------------------------------------------------------------------------------------
|
||||
이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다.
|
||||
SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다.
|
||||
예: :r .\myfile.sql
|
||||
SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다.
|
||||
예: :setvar TableName MyTable
|
||||
SELECT * FROM [$(TableName)]
|
||||
--------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis')
|
||||
BEGIN
|
||||
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
|
||||
VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE());
|
||||
|
||||
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
|
||||
VALUES ('SuperUserAlis','20','SuperUser');
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX')
|
||||
BEGIN
|
||||
INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime)
|
||||
VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE());
|
||||
|
||||
INSERT INTO tRole(cAuid, cRoleID, cRoleName)
|
||||
VALUES ('SuperUserSystemX','20','SuperUser');
|
||||
END
|
||||
@ -0,0 +1,5 @@
|
||||
CREATE TABLE [dbo].[tRefreshToken]
|
||||
(
|
||||
[cAuid] NVARCHAR(250) NOT NULL PRIMARY KEY,
|
||||
[cRefreshToken] NVARCHAR(1000) NOT NULL
|
||||
)
|
||||
@ -0,0 +1,6 @@
|
||||
CREATE TABLE [dbo].[tRole]
|
||||
(
|
||||
[cAuid] NVARCHAR(250) NOT NULL PRIMARY KEY,
|
||||
[cRoleID] TINYINT NOT NULL,
|
||||
[cRoleName] NVARCHAR(20) NOT NULL
|
||||
)
|
||||
@ -0,0 +1,10 @@
|
||||
CREATE TABLE [dbo].[tUser]
|
||||
(
|
||||
[cUserID] NVARCHAR(50) NOT NULL,
|
||||
[cAuid] NVARCHAR(250) NOT NULL ,
|
||||
[cPasswordHashed] NVARCHAR(250) NOT NULL,
|
||||
[cState] tinyint NOT NULL,
|
||||
[cCreateDateTime] DATETIME2 NOT NULL,
|
||||
[cLastLoginDateTime] DATETIME2 NULL,
|
||||
PRIMARY KEY ([cUserID])
|
||||
)
|
||||
Reference in New Issue
Block a user