I'll look forward to seeing what is introduced. Ultimately, there aren't that many sensitive fields in an application and a pluggable module to obscure those fields would likely be fine.
On Wed, Jul 19, 2017 at 8:41 AM, Andrus Adamchik <and...@objectstyle.org> wrote: > Hi Mike, > > While I totally support solving this problem, I am not keen on overloading > the core model with extra properties. We had this discussion under few > different subjects, but it really comes down to the fact that there can be > an infinite number of meanings one can associate with their model > attributes (e.g. cayenne-crypto treats certain attributes as encrypted; a > serialization framework may treat certain attributes as transient, etc., > etc.). We just can't support all these things in the core. So I suggest > that we don't. > > Instead we may design this as an extension that can work on top of the > core model. Kind of like cayenne-crypto, that determines which columns need > to be encrypted not from the DataMap, but using a pluggable strategy > (column naming convention by default). > > Also in 4.1 we will have a much more flexible model extension mechanism, > which Nikita is about to present. All those requests that we had over the > years of adding model comments and other arbitrary metadata will likely be > fulfilled soon. So it will be easier to write extensions like the one you > propose. > > Andrus > > > > > On Jul 19, 2017, at 3:28 PM, Michael Gentry <blackn...@gmail.com> wrote: > > > > Right now, everything is logged. It would be useful to be able to > > configure certain column values to not be logged, especially in a > > production environment. The main use case for this would be PII > > (Personally Identifiable Information -- passwords, birthdays, social > > security numbers, etc). Arguably, that information should be > > hashed/encrypted, but it is still not something you'd want leaked into a > > log file. Whenever a value isn't to be logged, put "[skipped]" in the > log > > output. > > > > I think it should work something like this: > > > > DataMap: > > > > Add a "Sensitive Logging" checkbox. Perhaps right under the "Optimistic > > Logging" checkbox. Default = ON. > > > > > > DbEntity / Entity Tab: > > > > Add a "Sensitive Logging" checkbox (basically mirroring the ObjEntity > > "Optimistic Logging" checkbox). Default = ON. > > > > > > DbEntity / Attributes Tab: > > > > Add a "Sensitive Logging" checkbox column (beside PK and Mandatory). > > Default = OFF. (OFF means log the value normally. ON means > conditionally > > log per behavior below). > > > > > > Upgrading older models: > > > > Default DataMap and DbEntity to ON. Leave DbEntity attributes OFF. > > > > > > Behavior: > > > > skipped = > > DataMap.ON && > > DbEntity.Entity.ON && > > DbEntity.Entity.Attribute.ON && > > Log.Level > DEBUG > > > > if skipped > > log [skipped] > > else > > log value > > > > > > In a production environment, log levels are typically > > INFO/WARN/ERROR/FATAL, so factor that into the skipping equation. When > > developing, log levels are typically DEBUG/TRACE, and in that case, log > the > > value. > > > > Also, given that all of the above can be changed at run-time, it allows > > flexibility in a production environment to turn the sensitive logging > > on/off through admin interfaces should the need arise. > > > > Thoughts? > > > > Thanks, > > > > mrg > >