问题标签 [data-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - 如何在 Hibernate 中限制数据库级别的用户访问
应用程序
我需要实现一个可供不同用户使用的网络应用程序。每个用户对不同的表有不同的权限,例如
Student
Student
我将在 UI 级别有一些东西来限制某些访问,例如为无权修改条目的用户隐藏“编辑”按钮。但是,我认为我应该在较低级别(也许在数据库级别?)只是为了确保数据安全。
问题
我正在为我的应用程序使用 Hibernate、JBoss、DB2 和 Struts。我想我应该使用某种 JBoss LoginModule,它使用用户/密码/角色对数据库进行用户身份验证(但我可能错了(?))。我做了一些研究并提出了以下选项,但似乎没有一个适合我的情况。我认为这是多用户 Web 应用程序中非常常见的数据访问问题。有人可以指出我正确的方向吗?先感谢您!
hibernate.cfg.xml
在JACC 事件监听器中使用“grant”标签。这可以对所有休眠实体设置“插入”“更新”“读取”权限。但是,如果我需要更精细的控制怎么办?我需要对某些字段而不是整个对象设置权限。http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-decl-security.html限制每个 ejb 的 getter/setter 方法的权限。如果我理解正确,这需要为每个用户配置文件手动配置每个 bean,这对我来说似乎不现实。 EJB 方法权限
对 DAO 进行编码以检查用户权限。滚动我自己的实用函数,每次调用特定的 DAO 方法时检查一个巨大的权限表,以确定登录用户是否可以执行该操作。
在 Hibernate 中使用“拦截器”和“事件”。为每个类定义特定的“onLoad”、“onSaveorUpdate”等事件和拦截器。在这种情况下,我可以为各个字段指定权限级别吗?http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-events.html
我可能是对着错误的树吠叫。以上所有似乎都是劳动密集型的,不是很聪明。以上选项都没有为我提供在运行时更改用户权限的编程方式,当管理员级别的用户想要在此应用程序中给予其他用户更多控制权时,这将很有用。
在这里进行数据访问控制的好方法是什么?
orm - ORM 与手工编码的数据访问层
我有点害怕问这个问题,因为它可能会引发一场宗教战争,所以我想非常清楚我在寻找什么。我正在寻找您为什么会或已经以某种方式跳跃的原因,以及要添加到我列表中的项目。我正在寻找大票,大爆炸物品。此外,如果它们确实相关,则可能是特定于产品的项目。在这一点上,我正在尝试评估 ORM 与手动,而不是产品 A 与产品 B。
ORM的优势
手工编码的优势
为了全面披露,我真的不喜欢在我认为合适的情况下对我无法直接修改的数据库执行代码的“东西”的想法,但我可以看到 ORM 潜在的大量开发时间优势。
它可能也值得注意我在一个.Net世界
[编辑](Using an ORM or plain SQL?中的问题似乎回答了许多问题并强化了关于性能的观点)
所以,稍微改变我的问题
有没有人在早期使用 ORM 构建应用程序,然后逐渐用手工编码的 DAL 代替?这种方法的缺陷是什么?
[进一步编辑——现在解决问题的核心]让一个网站能够对我的数据库执行任何 SQL 是可怕的。如果所有访问都是通过 sprocs 进行的,那么我的数据库将处于良好、安全、舒适的隔离状态。仅使用 sprocs 可以消除很多(如果不是全部)SQL 注入攻击向量。对此有何评论?
database - 交换数据库?
似乎许多 ORM 工具和自定义数据访问层(DAO 模式等)的目标是将数据库抽象到可以用最少的工作换出整个数据库系统的程度。
在代码中遵循常见的 DAL 模式通常是一个好主意,但换出数据库似乎永远不会是最小的工作。(成本、培训、数据迁移等)
有没有人有在大型系统中将一个数据库换成另一个数据库并处理代码中的影响的经验?是否值得担心从代码中抽象出实际的数据库?
wpf - 有人知道一个简单的 WPF/Silverlight 数据访问框架吗?
有谁知道一个简单的 WPF 或 Silverlight 框架,它使您能够例如在 SQL Server 紧凑型数据库中定义一些数据库表,然后该框架自动创建允许用户登录和编辑该数据的 Window 类等?
我不是在寻找复杂的 MVVM 模式示例,它可以是硬编码的,它应该只是节省开发人员创建所有 CRUD 代码和表单以及用户编辑数据所需的授权的时间。开发人员可以定义 10 个数据库表,运行代码生成,然后几乎 80% 完成了他想要制作的任何简单的数据库应用程序。
所有这些都是通用代码,所以我认为这样的框架会存在,或者有人已经在从事这样的开源项目。
有谁知道这样的框架或工具?
c# - 如何将 DbType.Time 的 Datareader 结果转换为 Timespan 对象?
我正在使用带有 DAAB 4.0 框架的 c# 从数据读取器中读取列类型为 dbtype.time 的 MS SQL 2008 数据库的结果。
我的问题是 MSDN 文档说 dbtype.time 应该映射到时间跨度,但我看到的唯一关闭的时间跨度构造函数接受 long,并且从数据读取器返回的结果不能转换为 long 或直接转换为时间跨度。
我发现这篇文章显示了 datareader.getTimeSpan() 方法,但是 daab 4.0 中的 datareader 似乎没有这个方法。
那么如何将数据读取器的结果转换为时间跨度对象呢?
tdd - 在数据库而不是假存储库上运行测试是不好的做法吗?
我知道优势是什么,并且在处理更复杂的系统时会使用假数据。
如果我正在开发一些简单的东西,我可以很容易地在一个真实的数据库中设置我的环境,并且正在访问的数据非常小,以至于访问时间不是一个因素,我只运行了几个测试。
创建假数据仍然很重要,还是我可以忘记额外的编码并直接跳到真实数据?
当我说真实数据库时,我指的不是生产数据库,而是测试数据库,而是使用真实的实时 DBMS 和与真实数据库相同的模式。
c# - C#静态数据库类?
我有一个包含以下方法的数据库类:
- public bool ExecuteUDIQuery(string query) // UDI = 更新删除插入
- public bool ExecuteSelectQuery(字符串查询)
- public bool ExecuteSP(string sp, string[,] parms)
- public int ExecuteSPReturnValue(string sp, string[,] parms)
方法的结果存储在私有数据集或数据表中。这些对象被定义为 getter。
大约有 10 个类使用 Database 类。每个类都创建类数据库的一个对象。现在我正在考虑使数据库类静态。这是一个好主意吗?如果是这样,为什么?不,为什么不呢?
xml - 帮助!Flash 无法从第三方域加载 XML 数据
我使用 RSS 提要从雅虎获取新闻,使用:
是的,这是合法的,虽然当我的 SWF 离线时它可以正常工作——它显示一个安全错误,但我允许我的 D 驱动器“域”在 Adobe安全面板中。
但是一旦我将它上传到我的服务器,并在线测试它:
在 Firefox3 中,数据加载失败,在状态栏上给我一条消息“从 finance.yahoo.com 传输数据”
在 InternetExplorer7 中,它静默失败,没有消息或警告。
发生了什么?我什至放了一个带有 * 通配符的crossdomain.xml文件(允许所有域)。
ms-access - 如何使用其他应用程序访问 Cognos PowerPlay Cubes?
Cognos PowerPlay Cubes (Cognos v7.3) 通过电子邮件分发,然后存储在本地客户端上。目前,用户使用 MS Access 作为界面来访问 Cubes 中的数据和报告。是否有任何其他工具、应用程序或编程语言允许访问 PowerPlay Cube 和其中的表格/图表?
要求是实现一个比旧的 MS Access 更易于使用的用户界面。
不能直接使用 Cognos Studios 访问数据,因为数据也必须离线可用。
谢谢你的任何想法。
此致。
web-services - SOA - 业务服务的数据访问是否作为单独的 Web 服务?
目前在我的组织内部,我们正在尝试为试点 SOA 项目提出一些约定。乍一看,我们认为最好是强制服务用户使用业务服务而不直接访问任何数据端点.. 但是否存在不正确的特定场景,或者它可能对开发人员“有效”访问服务之外的特定数据端点?
我总是担心,如果我们打开它,它实际上会损害重用,因为每个人都会使用与可用的相同后端数据“重新发明”类似的业务服务,并且“理论上......更容易”编写一个新的业务服务,而不是问“这个使用我的数据库的其他服务做什么?”
因为即使服务几乎是直接传递到数据库,我们也有能力应用可以节省开发人员时间并最终节省业务资金的规则。
想法?