3

この毎日のデータ フィードを取得します。(元のデータを管理することはできないため、データベースの修正を依頼することはできません。)

顧客レコードには、米国内の住所が含まれています。番地、市区町村、都道府県、郵便番号。

私たちの側では、マーケティング部門のデータベースのデータを使用します。住所が正しくない、または不完全であることに気づき、住所を変更したい場合があります。しかし、もちろん、次のデータ フィードが入ってきて、修正が消去されます。

スプレッドシートの保護されたセルのような、特定のフィールドが変更されないようにMySQLに保護する方法はありますか。これは、MySQL レコード レイアウトのフィールド名の一部です。

address1
address2
address3
市区町村
の郵便
番号

これに加えて、保護されたフィールドとして「Y」または「N」のフラグが付けられた追加のフィールドを作成するとどうなるでしょうか。

address1
address1_flag
address2
address2_flag
address3
address3_flag
都市
city_flag

state_flag
zipcode
zipcode_flag

たとえば、マーケティング部門が郵便番号を修正すると、zipcode_flag が「Y」に設定されます。これは、フィールドの郵便番号がさらに変更されないように保護することを意味します。元のデータ フィードが後で修正された場合、マーケティング部門のデータベースからの郵便番号が元のフィールドと一致する場合、zipcode_flag 保護は "N" に変更されます。

これは、毎日のフィードからマーケティング部門のデータベースを管理する正しい方法のように思えますか? または、これを行うために MySQL で利用できる別のアプローチまたは機能はありますか? ありがとう!

4

2 に答える 2

3

列レベルで権限を管理できます: http://dev.mysql.com/doc/refman/5.1/en/grant.html

于 2012-11-08T13:54:03.047 に答える
3

「保護された」フラグや機能はないと思いますが、目標を達成するために取るべき道はいくつかあります。

最初の最も具体的な方法は、MySQL で「制限付きユーザー」を作成することです。ユーザーを制限するには、SELECT変更したくない列にのみ権限を付与することができます。これを行うには、次を使用します。

GRANT SELECT(zipcode) ON addresses TO restrictedUser;

ここで良い例を見るか、マニュアルで詳細な情報を得ることができます。

2 番目の方法は、選択/挿入/更新を行うプロシージャを作成することです。これはやり過ぎかもしれませんが、ニーズに合わせて実行でき、ユーザー権限を変更する必要はありません。

選択および更新手順の簡単な例は次のとおりです (テストされていません)。

CREATE PROCEDURE select_addresses ()
BEGIN 
   SELECT address1, zipcode FROM addresses;
END 

CREATE PROCEDURE update_addresses ( IN recordID INT(11), IN newAddress1 VARCHAR(255) )
BEGIN
    SET @query := CONCAT("UPDATE addresses SET address1 = '", newAddress1, "' WHERE id = ", recordId);
    PREPARE stmt FROM @query;
    EXECUTE stmt;
END

これにより、ユーザーは呼び出しによって読み取りが許可されていると指定した任意の列を選択し、select_addresses()許可された列に対して を介して更新を実行できますupdate_addresses()。設定された変数のみを更新するために、ロジックのいくつかのレイヤーを追加する必要があります。

于 2012-11-08T13:54:40.860 に答える