注:高危!
有时候,开发人员在应用服务器上,能拿到数据库的帐号和密码
如果想让DBA死掉,太简单了(哈哈哈~~,有人在奸笑~~!)
所以DBA啊,得处处小心。。
(有人说话了:你傻X吧,应用程序服务器怎么能让开发人员随便上?!)
嘿,就是上了,你DBA能咋样?
如果技术上使数据库帐号只能从某个机器(或某个IP地址)用某个应用程序登录,岂不是很爽?
哎,可惜在MS官方没有找到解决方法......
今天在 小怪物(就是传说中的小怪物) 的大力帮助下,从SQL2005中找到一个方法(非官方),能实现类似功能。
免责声明:该脚本没有得到牛X人士的认可,玩大了,跟俺无关~~!
use msdb --我是在msdb里测试的,不建议在系统库里乱搞,后果自负
--1.创建表
CREATE TABLE [dbo].[UserFiltration](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[username] [varchar](100) NOT NULL DEFAULT ('*'),
[programname] [varchar](100) NOT NULL DEFAULT ('*'),
[IP] [varchar](100) NOT NULL DEFAULT ('*'),
[hostname] [varchar](100) NOT NULL DEFAULT ('*'),
[Comment] [varchar](1000) NOT NULL DEFAULT (''),
[Ctime] [datetime] NOT NULL DEFAULT (getdate() ......
org.jboss.util.NestedSQLException: Transaction TransactionImple < ac, BasicAction: -3f57fe61:e49:4ae01416:114 status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK; - nested throwable: (javax.transaction.RollbackException: Transaction TransactionImple < ac, BasicAction: -3f57fe61:e49:4ae01416:114 status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK)
at org.jboss.resource.adapter.jdbc.WrapperDataSource.checkTransactionActive(WrapperDataSource.java:165)
at org.jboss.resource.adapter.jdbc.WrappedConnection.checkTransactionActive(WrappedConnection.java:833)
at org.jboss.resource.adapter.jdbc.WrappedConnection.checkStatus(WrappedConnection.java:848)
at org.jboss.resource.adapter.jdbc.WrappedConnection.checkTransaction(WrappedConnection.java:825)
at org.jboss.resource.adapter.jdbc.WrappedConnection.getWarnings(WrappedConnection.java:618)
at org.hibernate.util.JDBCExceptionReporter.logAndClearWarnings(JDBCExceptionRepo ......
SQL语句操作全集
下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:
DDL—数据定义语言(Create,Alter,Drop,DECLARE)
DML—数据操纵语言(Select,Delete,Update,Insert)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from ......
对于Oracle的第三方开发工具,本人钟爱于Quest SQL Navigator 5.5,因为它反应迅速、支持多个账号同时登录,平时使用起来很方便。
不过,发现它有个缺点,就是一查询大点的表,CPU就占用50%以上,搞到我的本本狂叫,我真受不了。
到它官网,发现有新版本6.2了,不过下载要注册什么的,嫌麻烦。
晚上,突然想到Windows任务管理器里能设置软件运行时的优先级的,呵,就是用它啦!!!现在同样的查询只要3%左右。
绝招:把它的优先级设为“低”
......
sql注入防止的方式:
1.最根本的办法就是使用预编译的方式进行数据库操作。即时使用?的方式。
2.使用过滤类。
防止跨站脚本的方式:
1.在数据录入阶段进行过滤,但是这种方式会是丢失一些数据。
2. 在数据展示阶段。使用标签包含,innerhtml 的方式。 ......
在取一个平均值的时候往往遇到小数点位数的截取。
前几天遇到过这么个问题,在KingDee EAS 的查询分析器里面如果求某一物料的平均单价时我这样写道:
select avg = case sum(bentry.FQuantity) when 0 then 0 else (sum(bentry.famount)/sum(bentry.FQuantity)) end,
此语句看似没什么问题,毕竟是求平均值,可是如果要在页面显示小数点后两位时要怎么做呢?此报表不是BI样式,就在sql中如何实现?
正常情况下可以考虑的解决方案由很多,如:
cast( Round(A.iPrice,2) as varchar(50)) AS 单价
cast( Round(A.iPrice,0,1) as varchar(50)) AS 单价
cast(0.329999999999999 as numeric(5,2)或者decimal)
但是很抱歉 KingDee EAS 6.0 里面我发现不能使用 cast ,round ,而cast *******
as numberic /decimal 就更不能用了。
还可以考虑substing()函数,concat()函数之类的。后来发现Oracle DB 里面有个关键性的函数:
charindex很管用于是写了段sql如下:
avg = case charindex('.',"tableName.avgprice ) when 0 then tableName.avgprice else substring(tableName.avgprice,0,charindex('.',tableName.avgprice)+2) end
如果 ......