ms access 2024 ユーザーを管理するテーブル パスワードの文字数 *(アスタリスク)を使って表示



パスワードの列の値はフォームから入力するようにして、

その入力用のテキストボックス、定型入力のプロパティを
「パスワード」の値に設定すれば、

対応するテーブルを閲覧するときには
「*」などで表示されるようだ

-----------------------------------------------------

ms access 2024において

ユーザーを管理するテーブルを作成する際、
各ユーザーが使うパスワードを記録する列を定義するとき、

テーブルを閲覧する際に、

パスワードの文字数だけ
その列の値を*(アスタリスク)を使って表示させるような設定は
可能なのでしょうか?

    ↓

**MS Access 2024 において、
パスワードの列をアスタリスク (`*`) でマスキングする設定は可能か?**  


### **結論**

**Accessのテーブルレベルでは、
直接パスワードの文字数に応じて `*` を表示する設定はできません。**  
ただし、**フォームやクエリ、VBAを活用することで実現可能** です。  

---

## **方法①: フォームの「パスワード文字」設定(推奨)**

Access の **フォーム** に `password` フィールドを表示する場合、  
「パスワード文字」プロパティを `*` に設定すれば、
**入力時や表示時にアスタリスクで隠す** ことができます。


### **手順**

1. **フォームをデザインビューで開く**
2. `password` フィールドの **テキストボックス** を選択
3. **プロパティシート** → 「書式」タブを開く
4. **「パスワード文字」プロパティに `*` を設定**

👉 **結果:**  

フォームで `password` フィールドを見ると、
 
**データの長さ分だけ `*` で表示される**(「123456」→「******」)。  

**🔹 注意点:**  

- **テーブルを直接開いた場合は元のパスワードが見える**(マスキングされない)。  

- **クエリでも `*` でのマスキングはできない**(直接のプロパティ設定は不可)。  

---

## **方法②: クエリでマスキング(パスワードを `*` に置き換える)**

テーブルを直接閲覧するのではなく、
クエリを作成して**文字数分 `*` を表示** することも可能です。  

### **SQL クエリ**
```sql

SELECT UserID, String(Len(Password), "*")
                AS MaskedPassword FROM Users;

```
👉 **結果:**  
| UserID | MaskedPassword |
|--------|---------------|
| 1      | ******        |
| 2      | ********      |

**🔹 注意点:**  
- **実際の `password` の値はそのまま保持される。**  
- **このクエリ経由で閲覧すれば、元のパスワードが直接見えない。**  
- **テーブルを直接開くと、元のデータが見えてしまう。**  

---

## **方法③: VBAを使ってパスワードを暗号化(推奨)**

セキュリティを強化するなら、
**パスワードを暗号化して保存し、復号時のみ表示する**
方法が適切です。  

### **例: VBAで暗号化**

```vba

Function EncryptPassword(
    ByVal plainText As String) As String
    
    Dim i As Integer
    Dim encrypted As String
    For i = 1 To Len(plainText)
        '簡単なシフト暗号
        encrypted = encrypted
        & Chr(Asc(Mid(plainText, i, 1)) + 3)
    Next i
    
    EncryptPassword = encrypted
    
End Function

```

### **例: VBAで復号化**
```vba

Function DecryptPassword(
    ByVal encryptedText As String) As String

    Dim i As Integer
    Dim decrypted As String
    
    For i = 1 To Len(encryptedText)
        decrypted = decrypted
                & Chr(Asc(Mid(encryptedText, i, 1)) - 3)
        
    Next i
    
    DecryptPassword = decrypted
    
End Function

```


👉 **ポイント:**  

- パスワードは**テーブルには暗号化された状態で保存**。  
- ユーザーがログイン時に**VBAで復号化**して認証。
 
- **セキュリティ強化**に繋がる
    (ただし本格的な暗号化ならAESなどを利用すべき)。  


---

## **まとめ**
| 方法 | できること | 制限・注意点 |
|------|------------|--------------|
| **フォームの「パスワード文字」プロパティ** | `*` でマスキング | テーブルを直接開くと見える |
| **クエリで `*` に変換** | `SELECT UserID, String(Len(Password), "*") AS MaskedPassword FROM Users;` | 実データは隠せない |
| **VBAで暗号化&復号化** | パスワードを安全に保存 | 実装に手間がかかる |


---

## **結論 & おすすめの方法**

- **シンプルに `*` で隠すなら** → **フォームの「パスワード文字」設定**
- **テーブルを直接開かれたくないなら** → **クエリで `*` に変換**
- **セキュリティを強化するなら** → **VBAで暗号化・復号化**


テーブルの閲覧時に `*` でマスキングする方法はないので、  
「フォームを使って表示を制御する」か、

「クエリ/VBAで加工する」方法が必要になります! 😊


コメント