新しい生産管理システムが TECHS のデータを毎晩自動で受け取るための、最初の1回だけの設定です。
ff_readonly)は作成できません。
下の「Windows認証のみの場合」の手順に読み替えてください。以降のSQLログイン手順は、
混在モードのサーバー向けに残してあります。
SQL Server 側の認証モードを変更する必要はありません。 Windows のアカウントをそのまま SQL Server に登録して、読み取り権限だけを与えます。 サーバーの再起動も不要です。
手順1. 読み取り専用に使う Windows アカウントを作ります(管理者の PowerShell)。
$pw = Read-Host "ff_readonly のパスワード" -AsSecureString New-LocalUser -Name 'ff_readonly' -Password $pw -PasswordNeverExpires -AccountNeverExpires ` -Description '生産管理システム連携用(読み取り専用)'
手順2. そのアカウントを SQL Server に登録し、TECHS6 を読むだけの権限を与えます
(SSMS で実行。TECHS-SERVER は実際のサーバー名に読み替えてください)。
-- ① Windows アカウントを「ログイン」として登録(パスワードは SQL 側で持ちません) USE [master]; GO CREATE LOGIN [TECHS-SERVER\ff_readonly] FROM WINDOWS WITH DEFAULT_DATABASE = [TECHS6]; GO -- ② TECHS6 で「読むだけ」の権限 USE [TECHS6]; GO CREATE USER [TECHS-SERVER\ff_readonly] FOR LOGIN [TECHS-SERVER\ff_readonly]; GO ALTER ROLE [db_datareader] ADD MEMBER [TECHS-SERVER\ff_readonly]; GO -- ③ 念のため書き込みを明示的に禁止 DENY INSERT, UPDATE, DELETE TO [TECHS-SERVER\ff_readonly]; GO
手順3. 同期は「誰もログオンしていない状態」でも動く必要があるため、 このアカウントにバッチジョブとしてのログオンを許可します。
secpol.msc → ローカルポリシー → ユーザー権利の割り当て →
「バッチ ジョブとしてログオン」 に ff_readonly を追加。TECHS6 の読み取りだけです新しいシステムが TECHS のデータ(品番・部品表・在庫・発注など)を毎晩自動で読み取るために、TECHS のデータベースに「見るだけの利用者」を1人つくります。
最初に事前確認を行います。ここで「そのまま進められる」か「別紙の設定が先に必要」かが分かります。多くの場合はそのまま進められます。
まず、TECHS がどのサーバーに繋がっているかを確認します。TECHS がインストールされているフォルダの中にある、EUCConnection.ini というファイルを開きます。
ファイルを右クリック → プログラムから開く → メモ帳 を選んでください。次のような、4行だけの短いファイルです。
SERVER= の右側がサーバー名です(イメージ図)SERVER= の右側の文字列がサーバー名です。上の例では TECHS-SERVER ですが、お客様の環境では違う名前になっています。そのままの文字で正確にメモしてください。
\(円記号/バックスラッシュ)が入っている場合
SERVER=SV01\TECHS のように \ が入っていることがあります。これは「名前付きインスタンス」といって、1台のサーバーに複数の SQL Server が入っている構成です。その場合も、記号を含めてそのまま全部メモしてください。省略すると繋がりません。,(カンマ)の後ろに数字がある場合(例 SV01,1433)は、その数字がポート番号です。これもメモしてください。
C:\ を開き、右上の検索欄に EUCConnection.ini と入力して探してください。見つからなくても、手順4の事前確認で正式なサーバー名が分かりますので、そのまま次へ進んでください。
データベースの設定をする道具です。SSMS(エスエスエムエス)と略します。
Windows のスタートボタンを押し、SQL Server Management Studio と入力してください。出てきたら、それをクリックして起動します。
SSMS ダウンロード と検索し、Microsoft の公式サイト(learn.microsoft.com)からダウンロードしてください。インストールは「次へ」を押していくだけですが、環境によっては15分ほどかかります(冒頭の所要時間はこれを含みません)。SSMS を起動すると、接続画面が出ます。次のように入力してください。
| 項目 | 入れるもの |
|---|---|
| サーバーの種類 | データベース エンジン(最初からこうなっています) |
| サーバー名 | 手順1でメモした名前。分からなければ .(ピリオド1文字)または localhost |
| 認証 | 「Windows 認証」のまま |
| 暗号化 | 欄がある場合は〔サーバー証明書を信頼する〕にチェックを入れてください |
「接続」を押して、左側にフォルダの一覧が出れば成功です。
上のメニューの「新しいクエリ」ボタンを押すと、文字を入力できる白い画面が開きます。そこに下の内容を貼り付けて、「実行」(または F5 キー)を押してください。
-- 【事前確認】設定は変更しません。調べるだけです。 -- ① 認証モード SELECT CASE SERVERPROPERTY('IsIntegratedSecurityOnly') WHEN 1 THEN N'△ Windows認証のみ → 別紙の設定が必要' ELSE N'○ 混在モード → このまま進めます' END AS [1_認証モード]; GO -- ② TCP/IP とポート番号 -- ループバック(127.0.0.1 / ::1)を除外しています。TCP/IP を無効にしても -- 管理用接続(DAC)がループバックの1434で待ち受けたままになるため、 -- 除外しないと「TCP有効・ポート1434」と誤って表示されます。 SELECT CASE WHEN EXISTS (SELECT 1 FROM sys.dm_tcp_listener_states WHERE type_desc = 'TSQL' AND state_desc = 'ONLINE' AND ip_address NOT IN ('127.0.0.1', '::1')) THEN N'○ 有効' ELSE N'△ 無効 → 別紙の設定が必要' END AS [2_TCP接続], (SELECT TOP 1 CAST(port AS nvarchar(10)) FROM sys.dm_tcp_listener_states WHERE type_desc = 'TSQL' AND state_desc = 'ONLINE' AND ip_address NOT IN ('127.0.0.1', '::1') ORDER BY is_ipv4 DESC) AS [3_ポート番号]; GO -- ③ ポート番号が固定か自動か -- 「自動」の場合、サーバーを再起動するたびに番号が変わります。今は -- つながっても、次にサーバーを再起動した日に夜間同期が止まります。 DECLARE @dyn nvarchar(50), @static nvarchar(50); EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IPAll', N'TcpDynamicPorts', @dyn OUTPUT; EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IPAll', N'TcpPort', @static OUTPUT; SELECT CASE WHEN ISNULL(@static, '') <> '' THEN N'○ 固定' WHEN ISNULL(@dyn, '') <> '' THEN N'△ 自動(再起動で変わる)→ 別紙の設定が必要' ELSE N'- 判定できませんでした' END AS [4_ポート種別]; GO -- ④ サーバーの情報 SELECT @@SERVERNAME AS [5_サーバー名], ISNULL(CAST(SERVERPROPERTY('InstanceName') AS nvarchar(128)), N'(既定のインスタンス)') AS [6_インスタンス名], CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(32)) AS [7_バージョン]; GO -- ⑤ データベースの一覧(TECHS6 があるか確認) SELECT name AS [8_データベース名] FROM sys.databases WHERE database_id > 4 ORDER BY name; GO
5つの表が縦に並んで表示されます。①②③に「△」が1つでもあるかを見てください。
| 結果 | 次にすること |
|---|---|
| ①②③とも「○」 | そのまま手順5へ進んでください。多くの場合はこちらです。 |
| 「△」がある | 先にサーバー側のネットワーク設定が必要です。この手順書はここで一旦中断し、別紙
「SQL Server ネットワーク設定(保守業者さま向け)」
を情報システム担当者または保守業者さんにお渡しください。 その作業が終わってから、手順5に戻ってください。 |
TECHS6 がない場合
データベース名が違う環境です。一覧に出ている名前(TECHS_○○ のような形のことがあります)を控えてください。手順5でその名前に読み替えます。
この利用者専用のパスワードを決めてください。次の条件を満たす必要があります。
Tk9#mQx2Lp7v のような、意味のない文字の並びにしてください。この例文をそのまま使うと、誰でも入れてしまいます。
-- ① サーバーに「ログイン」を作る USE [master]; GO CREATE LOGIN [ff_readonly] WITH PASSWORD = N'ここに決めたパスワードを入れる', DEFAULT_DATABASE = [TECHS6], CHECK_EXPIRATION = OFF, CHECK_POLICY = ON; GO -- ② TECHS6 で「読むだけ」の権限を与える USE [TECHS6]; GO CREATE USER [ff_readonly] FOR LOGIN [ff_readonly]; GO ALTER ROLE [db_datareader] ADD MEMBER [ff_readonly]; GO -- ③ 念のため、書き込みを明示的に禁止する DENY INSERT, UPDATE, DELETE TO [ff_readonly]; GO
貼り付けたら、ここに決めたパスワードを入れる の部分(前後の ' は残す)を、5-1で決めたパスワードに書き換えます。
手順4の⑤で TECHS6 以外の名前だった場合は、上の TECHS6 をすべてその名前に書き換えてください。
そして「実行」ボタン(または F5 キー)を押します。
もう一度「新しいクエリ」を開き、次を貼り付けて実行してください。
USE [TECHS6]; SELECT r.name AS [権限], m.name AS [利用者] FROM sys.database_role_members rm JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id JOIN sys.database_principals m ON rm.member_principal_id = m.principal_id WHERE m.name = 'ff_readonly';
次のように1行だけ表示されれば、正しくできています。
| 権限 | 利用者 |
|---|---|
| db_datareader | ff_readonly |
何も表示されない(0行)の場合は、手順5がうまくいっていません。もう一度手順5からやり直してください。
新システムの同期プログラムを動かすパソコンに移動してください(サーバーとは別の機械です)。
スタートボタンを押し、PowerShell と入力して Windows PowerShell を起動します。次の内容を貼り付けて Enter を押してください。
# 下の3つを、手順4の結果の値に書き換えてください $server = "TECHS-SERVER" $port = "1433" $database = "TECHS6" $pw = Read-Host "ff_readonly のパスワードを入力" -AsSecureString $plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto( [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pw)) # tcp: を付けるのが重要です。付けないと、サーバー機の上で実行したときに # ネットワークを使わない接続(共有メモリ)になり、TCP が無効でも「成功」して # しまいます。テストの意味がなくなります。 $cs = "Data Source=tcp:$server,$port;Initial Catalog=$database;User ID=ff_readonly;" + "Password=$plain;Encrypt=True;TrustServerCertificate=True;Connect Timeout=10" try { $conn = New-Object System.Data.SqlClient.SqlConnection $cs $conn.Open() $cmd = $conn.CreateCommand() $cmd.CommandText = "SELECT COUNT(*) FROM sys.tables" Write-Host "○ 成功しました。読み取れたテーブル数:" $cmd.ExecuteScalar() -ForegroundColor Green $conn.Close() } catch { Write-Host "× 失敗しました:" $_.Exception.Message -ForegroundColor Red }
パスワードの入力を求められます。入力しても画面には何も表示されませんが、正しく入力されています。そのまま Enter を押してください。
○ 成功しました。読み取れたテーブル数: 123 のように緑色で出れば完了です(数字は環境によって違います)。ここまで来れば作業は終わりです。
作業が終わったら、次の内容をご連絡ください。印刷して書き込んでいただいても構いません。
\ が入る場合は含めて全部
作った利用者を消したくなったら、いつでも次を実行してください。元通りになります。TECHS のデータには影響しません。
USE [TECHS6]; GO DROP USER [ff_readonly]; GO USE [master]; GO DROP LOGIN [ff_readonly]; GO
| 出たメッセージ | 意味と対処 |
|---|---|
| サーバーへの接続を確立できませんでした(手順3) | サーバー名が違うか、サーバーが起動していません。同じサーバー機の上で作業しているなら . か localhost を試してください。 |
| パスワードが複雑性の要件を満たしていません | パスワードが簡単すぎます。12文字以上で、大文字・小文字・数字・記号を混ぜたものに変えて、もう一度実行してください。 |
| 'ff_readonly' は既に存在します | すでに作成済みです。手順6の確認を実行して1行表示されれば完了しています。作り直す場合は手順9で消してから、もう一度手順5を実行してください。 |
| CREATE LOGIN 権限がありません / このアクションを実行する権限がありません |
今ログインしている Windows ユーザーに管理者権限がありません。サーバーの管理者アカウントでログインし直すか、保守業者さんにご依頼ください。 |
| データベース 'TECHS6' が存在しません | データベース名が違います。手順4の⑤の一覧で正しい名前を確認し、読み替えてください。 |
| 手順7で「ユーザー 'ff_readonly' はログインできませんでした」 | サーバーが Windows 認証のみの設定です。手順4の①が「△」だったはずです。別紙 「SQL Server ネットワーク設定」の作業が必要です。 |
手順7で A network-related or instance-specific error…(provider: TCP Provider, error: 0 …)※このメッセージは英語で出ます(サーバーではなく接続部品が出すため) |
TCP/IP が無効か、ファイアウォールで塞がれています。手順4の②が「△」だったはずです。別紙 「SQL Server ネットワーク設定」の作業が必要です。 |
| 「証明書チェーンは、信頼されていない機関で発行されました」 | 手順3で出た場合:接続画面の〔サーバー証明書を信頼する〕にチェックを入れて、もう一度〔接続〕を押してください。 手順7で出た場合:貼り付けた内容の TrustServerCertificate=True が消えている可能性があります。もう一度コピーし直してください。 |
読み取りは深夜2時ごろに1回だけ行います。日中の業務時間には動きません。
ありません。今回つくる利用者は「読むだけ」の権限しか持っておらず、手順5の③で書き込みを明示的に禁止もしています。仕組みとして書き込めません。
この手順書の作業では止まりません。サーバーの再起動も行いません。もし手順4で「△」が出た場合のみ、別紙の作業で一時的な停止が発生しますが、それは実施日時を相談してから行います。
影響しません。既存の利用者の設定は一切変更していません。
新システムへの移行が完了するまでの間です。不要になったら手順9で削除してください。