2022年3月14日月曜日

SSDT(SQL Server Data Tools) スキーマの比較でエラー 「比較が制限されています」

SSDTのスキーマ比較でトラブル。エラーの詳細は

 「データベースに対する View Definition アクセス許可がないため、リバース エンジニアリング操作を続行できません。」


解決方法は

データベースの「セキュリティ」→「ログイン」で対象のアカウントで右クリック→「プロパティ」→「セキュリティ保護可能なリソース」で「定義の表示」に許可をチェック



(参考)



2021年5月12日水曜日

SQL Server リンクサーバーを使って ACCESS accdb にデータをコピー

  • アクセス側からデータを引っ張る
  • SQL Server 側からデータを送る
  • アプリケーションでSQL Server からデータを引っ張りアクセスに送る

など色々と方法は考えられるかと思いますが、そのうちの一例「SQL Server から accdb にリンクサーバーで接続し、データを出力する方法」をメモしておきます。


構成

  • Windows Server 2019 64bit
  • SQL Server Web 2019 64bit
  • IIS 10
開発環境は
  • Windows 10 Pro 64bit
  • SQL Server 2019 Express 64bit
  • Visual Studio 2019
  • Office 2019 32bit


初めに空のaccdbファイルを作成して必要な場所に配置しておくと良いです。ACCESSのインストールされていない環境でもaccdbファイルを作成することが出来るようですが、詳細は検索してください。


64bit SQL Server からACCESS accdbファイルに接続するには 64bit 版の Microsoft.ACE.OLEDB が必要です。未インストールの場合は以下から入手できます。(ただし、64bit版と32bit版の共存にはトラブルがあるようで、既に32bit版Officeの入っていた私の開発環境ではACCESSが起動しなくなってしまいました。)


Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント

https://www.microsoft.com/ja-JP/download/details.aspx?id=54920


インストールに成功するとSSMSのサーバーオブジェクト→リンクサーバー→プロバイダーから確認できます。


「リンクサーバー」右クリック→「新しいリンクサーバー」でウィザードが表示され設定できます。




以降は以下のような形でSSMSからリンクサーバーにクエリを投げることができます。

EXEC ('CREATE TABLE Sample (
	Id INTEGER NOT NULL,
	Name TEXT(50) NOT NULL,
	Email TEXT(50)
)') AT [LINKSERVERNAME];

表題のSQLサーバからACCESS accdbにデータを出力するためのクエリを作成しますが、ラクをするために事前に出力先のテーブルをSSMSのエクスポートウィザードで作成しておきます。もちろんCREATE文を書いて対応するテーブルを作成してもかまいません。




以下のストアドプロシージャを作成します。


USE [SampleDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE spExportFromSQLtoACCDB 
AS
BEGIN
	SET NOCOUNT ON;

	DELETE FROM [LINKSERVERNAME]...[Sample];
	INSERT INTO [LINKSERVERNAME]...[Sample] SELECT * FROM SampleDB.dbo.Sample
END
GO

このストアドプロシージャを実行すれば SQL Server から accdb へのデータのエクスポートが実行できますが、アプリケーションから実行するにはパーミッションの設定が必要です。 今回の場合は ASP.NET から実行する形でしたので、IISの当該アプリケーションプールIDにaccdb ファイルへの変更権限を付与します。 アプリケーションプールIDはファイルの権限設定ウィンドウに出てこないので「IIS AppPool\DefaultAppPool」のような形で追加します。

以上メモまで。

2021年4月5日月曜日

Visual Studio 2017 2019 ASP.NET MVC で AREA を追加する方法

プロジェクトを右クリック→「追加」→「新規スキャフォールディングアイテム」


「共通」→「MVC」→「区分」

以上、メモまで。

2021年4月3日土曜日

AWS SES の SMTP で EC2 からメール送信

メモだけ


 ・AmazonSES登録

・SMTP Credentials生成(ID,パスワード発行)

・ID承認(メールアドレスまたはドメイン登録)

・同一リージョンで制限解除申請

・EC2のファイアウォール設定(必要に応じて)

・EC2セキュリティグループ設定(アウトバウンドルールに当該のポートを登録)

2021年3月13日土曜日

【IIS】Web Deploy のおさらい

公式の解説は以下などを参考


0. 手順

1. IISのインストール

2. Microsoft Web Deploy のインストール

3.IIS マネージャーユーザーの追加

4. 管理サービスの委任

5. 管理サービスの起動

6. ユーザーの設定を変更

7. ファイアウォールの設定

8. その他セキュリティの設定

9. 出力ディレクトリのパーミッションの設定

10. Web配置による発行の有効化

11. Visual Studio から発行



1. IISのインストール

「役割と機能の追加」からIISをインストール




2. Microsoft Web Deploy のインストール

以下ページからMicrosoft Web Deploy 3.6 をダウンロード

https://www.microsoft.com/ja-jp/download/details.aspx?id=43717




「完全」を選択してインストール



3.IIS マネージャーユーザーの追加

IIS マネージャーを開きIISマネージャーユーザーを追加





4. 管理サービスの委任

WebDeployをインストールした時点で適切な設定になっていると思いますが確認

「WDeployConfigWriter」と「WDeployAdmin」というユーザーが自動で作成されている



5. 管理サービスの起動


ポート変更などを行う場合はここで行う



6. ユーザーの設定を変更

先ほど自動生成されたユーザー「WDeployConfigWriter」と「WDeployAdmin」の設定を変更する

「コンピューターの管理」ツールを起動しユーザーの一覧を表示する


両ユーザーについて、右クリック→プロパティでプロパティ画面を開き「パスワードを無期限にする」にチェックを入れる

(この設定は絶対に必要という訳ではありませんが、パスワードの期限切れである日突然デプロイが出来なくなりハマる事があります)


また、ここで両ユーザーのパスワードを変更した場合は、IISマネージャーの「管理サービスの委任」から、両ユーザーが割り当てられている規則の「編集」画面を開き、「資格情報の指定」からパスワードを設定します。



7. ファイアウォールの設定

Windows Defender ファイアウォールの設定画面を開き、「受信の規則」→「新しい規則」からデプロイのポート(デフォルトだと8172)を追加する








8. その他セキュリティの設定

ホスト先のサーバーの設定によりますが接続ポートの許可設定などを行います

例えばAWS EC2 であればセキュリティグループの「インバウンドルール」にポートの許可設定を追加します



9. 出力ディレクトリのパーミッションの設定

IISマネージャー、あるいはエクスプローラーから当該ディレクトリの「アクセス許可の編集」を行います


「LOCAL SERVICE」 にフルコントロール権限を与えます



10. Web配置による発行の有効化

IISマネージャーで設定したいサイト上で右クリック→展開→Web配置による発行の有効化を選択します

対象が配下のWebアプリケーションや仮想ディレクトリであっても親サイト上で行います



「発行アクセス許可を付与するユーザーを選択します」のところで先ほど作成したIISユーザーである「webdeploy」を設定します


「設定」を行うと指定した場所に設定ファイル(拡張子 .PublishSettings)が作成されます


11. Visual Studio から発行

Visual Studio のソリューションエクスプローラーで発行したいWebプロジェクトを右クリック→発行を選択します



先ほど出力した設定ファイルを読み込ませます


「編集」をクリックしてパスワードを設定します

サイト配下のアプリケーションや仮想ディレクトリに発行する場合は「サイト名」の箇所にスラッシュ区切りで当該ディレクトリを指定します

接続の検証を押下し、成功するとグリーンのチェックマークが表示されます





WebDeploy を解説してくれているサイトは結構あるのですが、ユーザーパスワードの期限やディレクトリのパーミッション権限などに言及されているのが少なく、自分がちょくちょくハマってしまうのでまとめてみました。

以上です。