0

私が見ている問題の原因がわかったので、以前に尋ねた質問を再キャストします。

私が持っているもの:SQL Server2000上のDB内のテーブル。Access2007、SQL Server Management Studio 2005、および場合によってはSQL 2000EnterpriseManagerを使用してテーブルを表示/編集します。

私がしたこと:SQLServer2000からSQLServer2005のローカルインスタンスにDBをコピーしようとしました。コピーはエラーなしで発生しました。Access 2007でコピーしたDBのテーブルを表示しようとすると、例外がスローされました。

私が見つけたもの:例外をスローしていたテーブルには、それらに関連付けられた拡張プロパティがありました。これは、Accessでテーブルレイアウトへの変更を保存するために「はい」と言ったことにさかのぼります。

これを修正するために試したこと:SQL Server 2005 Management Studioを使用して拡張プロパティを削除し、DBを再コピーしようとしましたが、問題は修正されませんでした。テーブルのスクリプトを作成すると、拡張プロパティが実際にテーブルに表示されなくなっていないことがわかりました。

今私の質問に:

DBにあるsyspropertiesテーブルと呼ばれるEnterpriseManagerを使用してテーブルを追跡しました。 これは文書化されていないテーブル(ため息)かもしれませんが、それは私にすべての頭痛の種を引き起こしている拡張プロパティ情報を持っているようです。別のテーブルのレイアウトを変更して、 syspropertiesテーブルにレコードが追加されているかどうかを確認しようとしましたが、答えはノーのようでした。

誰かがこの問題の経験がありますか?このテーブルのエントリを削除するだけで安全ですか?私が行った「レイアウトの変更」のほとんどは、Accessの列のサイズを調整することだったと思います。そのため、そこに保存されているのがそれだけであれば、それで対応できます。

さらに、Enterprise Managerで拡張テーブルのプロパティを探しましたが、SSMS2005内からのように簡単にアクセスできませんでした。

前もって感謝します!

4

1 に答える 1

1

アクセスフロントがMDBであるかACCDBであるかはわかりませんが、前者である場合は、ユーザーが設計変更を保存できないようにするアクセス許可をTableDefに設定してみませんか?これを確認する必要がありますが、フロントエンドのテーブルリンクから削除したいのはMODIFYDESIGNプロパティとADMINISTERプロパティだと思います。

ACCDBの場合、おそらくそれを修正する唯一の方法は、リンクされたテーブルを再作成することです。

ただし、なぜユーザーがテーブルを直接編集できるようにしているのか疑問です。フォームとレポートのデータにのみアクセスできるようにする必要があります(フォームはデータシートにすることができるため、テーブル自体を使用しなくても、テーブルデータバシートの便利な機能をすべて複製できます)。

また、ユーザーは、SQLServerテーブルに対して必要以上の特権を持っている必要があるようです。これらのプロパティがSQLServerにどのように格納されるかについての詳細はわかりませんが(私のSQL Serverの動作は古いバージョンで行われます)、これらのプロパティをサーバーに保存することを禁止するグループ権限をオブジェクトに割り当てる必要があります。

とはいえ、リンクされたテーブルへの直接アクセスをユーザーに許可することで、独自の問題が発生しています。これを修正すれば、AccessまたはSQLServerのテーブルに対するユーザー権限を気にすることなく問題が解決します。

于 2009-09-02T02:50:45.347 に答える