1. 建立示範資料庫結構

1.1 資料庫架構

SQL Server 資料庫架構

image

1.2 使用者操作資料庫架構

使用者操作資料庫架構

image

image

1.3 建立示範資料庫

步驟 1. 新增資料庫

image

步驟 2. 輸入資料庫名稱(erpdb)及路徑(d:\db)並新增

image

步驟 3. 新增資料庫

image

步驟 4. 輸入資料庫名稱(crmdb)及路徑(d:\db)並新增

image

1.4 建立示範資料表及資料

示範資料表語法

DROP TABLE IF EXISTS [dbo].[Users]
GO
 
DROP TABLE IF EXISTS [dbo].[Orders]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Orders](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[OrderNo] [nvarchar](50) NULL,
	[OrderDate] [date] NULL,
	[CustomerName] [nvarchar](50) NULL,
	[Amounts] [int] NULL,
	[Remark] [nvarchar](250) NULL,
 CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[UserNo] [nvarchar](50) NULL,
	[UserNane] [nvarchar](50) NULL,
	[UserId] [nvarchar](50) NULL,
	[GenderNo] [nvarchar](50) NULL,
	[ContactTel] [nvarchar](50) NULL,
	[Remark] [nvarchar](250) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
 
INSERT [dbo].[Orders] ( [OrderNo], [OrderDate], [CustomerName], [Amounts], [Remark]) VALUES (N'O20250101001', CAST(N'2025-01-01' AS Date), N'明新科技', 500000, N'')
INSERT [dbo].[Orders] ( [OrderNo], [OrderDate], [CustomerName], [Amounts], [Remark]) VALUES (N'O20250101002', CAST(N'2025-01-02' AS Date), N'尚華科技', 800000, N'')
GO
 
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U001', N'王大明', N'H128004226', N'M', N'02-31283848', N'')
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U002', N'李小華', N'H238016129', N'M', N'02-91878374', N'')
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U003', N'陳小國', N'H122834662', N'M', N'02-33747756', N'')
GO
 
USE [crmdb]
GO
 
DROP TABLE IF EXISTS [dbo].[Users]
GO
 
DROP TABLE IF EXISTS [dbo].[Orders]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Orders](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[OrderNo] [nvarchar](50) NULL,
	[OrderDate] [date] NULL,
	[CustomerName] [nvarchar](50) NULL,
	[Amounts] [int] NULL,
	[Remark] [nvarchar](250) NULL,
 CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[UserNo] [nvarchar](50) NULL,
	[UserNane] [nvarchar](50) NULL,
	[UserId] [nvarchar](50) NULL,
	[GenderNo] [nvarchar](50) NULL,
	[ContactTel] [nvarchar](50) NULL,
	[Remark] [nvarchar](250) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
 
INSERT [dbo].[Orders] ( [OrderNo], [OrderDate], [CustomerName], [Amounts], [Remark]) VALUES (N'O20250101001', CAST(N'2025-01-01' AS Date), N'明新科技', 500000, N'')
INSERT [dbo].[Orders] ( [OrderNo], [OrderDate], [CustomerName], [Amounts], [Remark]) VALUES (N'O20250101002', CAST(N'2025-01-02' AS Date), N'尚華科技', 800000, N'')
GO
 
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U001', N'王大明', N'H128004226', N'M', N'02-31283848', N'')
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U002', N'李小華', N'H238016129', N'M', N'02-91878374', N'')
INSERT [dbo].[Users] ([UserNo], [UserNane], [UserId], [GenderNo], [ContactTel], [Remark]) VALUES (N'U003', N'陳小國', N'H122834662', N'M', N'02-33747756', N'')
GO

步驟 1. 新增查詢

image

步驟 2. 執行示範資料表語法

image

2. 安全性需求說明

2.1 客戶端需求

今有一 客戶X 有兩的資料庫 erpdb 及 crmdb 如下

資料庫列表

image

資料表結構

image

範例資料

image

資訊部門人員結構

姓名職稱資料庫帳號負責資料庫
楊小月資訊部門經理sa全有資料庫
李小同資訊部門MISzoeerpdb
陳小方資訊部門MIStomcrmdb

2.2 外包端需求

外包端需求說明

  • 客戶X 將 ERP 系統的 部份功能 外包給 廠商Y,
  • 允許 廠商Y 對 Orders 表格有所有權限,
  • 僅允許讀取 Users 表格中的 UserNo 及 UserName 兩個欄位

廠商Y人員結構

姓名職稱資料庫帳號資料庫權限
李小天程式設計師v001ERP 資料庫的 Orders 表格有所有權限 及 Users 表格中的 UserNo 及 UserName 兩個欄位

2.3 帳號權限示意圖

帳號權限示意圖

image

2.4 資料庫帳號權限列表

帳號使用人員角色erpdb權限crmdb權限說明
sa楊小月sysadmindbo (完全控制)dbo (完全控制)可管理整台伺服器及所
有資料庫。
zoe李小娟publicdb_owner (管理者)無法存取僅能管理 ERP 資料庫。
tom方小同public無法存取db_owner (管理者)僅能管理 CRM 資料庫。
v001外包廠商 (共用)public特定 Views 的 SELECT 權限無法存取權限被嚴格限制在 ERP 資料庫的兩個檢視表上。

3. 實作客戶端帳號權限管理

3.1 zoe 帳號

實作 zoe 帳號權限管理

image

image

image

image

3.2 tom 帳號

實作 tom 帳號權限管理

image

image

image

image

4. 實作外包端帳號權限管理

4.1 新增 v001 帳號

實作 v001 帳號權限管理

image

image

image

image

4.2 建立 erpdb 資料庫 vi_users 檢視

實作建立 vi_users 檢視

image

image

image

image

image

image

4.3 設定 vi_users 權限

實作設定 vi_users 權限

image

image

image